Talend를 사용하여 Excel에서 SQL 테이블로 데이터를 복사합니다. 복사하기 전에 기본 키 열을 확인해야합니다. 키가 데이터베이스에 이미 존재하면 해당 레코드를 업데이트하거나 데이터베이스에 해당 레코드를 삽입해야하며 자동 증가 키가 할당됩니다.Talend에서 Excel에서 SQL로 복사하는 동안 삽입/업데이트
어떻게하면됩니까?
Talend를 사용하여 Excel에서 SQL 테이블로 데이터를 복사합니다. 복사하기 전에 기본 키 열을 확인해야합니다. 키가 데이터베이스에 이미 존재하면 해당 레코드를 업데이트하거나 데이터베이스에 해당 레코드를 삽입해야하며 자동 증가 키가 할당됩니다.Talend에서 Excel에서 SQL로 복사하는 동안 삽입/업데이트
어떻게하면됩니까?
간단하지만 느린 방법으로 txxxSqlOutput 구성 요소에서 INSERT OR UPDATE
또는 UPDATE OR INSERT
(업데이트 또는 삽입이 먼저 시도되는지 여부가 다름) 옵션을 사용하면됩니다. 이것은 RDBMS 구성 요소의 대부분이 SQL 서버 하나를 포함하여 지원됩니다
당신이 다음 Update or insert
옵션은 반대의 더 나은 성능과 것이다 삽입보다 더 많은 업데이트를 기대합니다.
또는 데이터베이스를 미리 쿼리 한 다음 데이터 흐름을 사용하여 기본 키의 내부 조인을 데이터베이스에 추가 할 수 있습니다. 일치 사항은 분명히 업데이트되며 거부 (tMap의 다른 데이터 흐름에서 Catch inner join reject
사용)는 분명히 삽입됩니다. TMAP를 함께
두 번째 방법이 더욱 확대됨 될 수있는 첫 번째 방법은 삽입하려고하는 큰 데이터 세트를 upserting 특히 각 줄을 한 줄씩 읽은 다음 실패하면 업데이트 문으로 다시 씁니다.
두 번째 이점은 더 이상 의도적으로 실패한 삽입/업데이트를 캐치하고 업데이트/삽입하지 않아도되므로 단일 배치/트랜잭션에 포함될 수 있다는 것입니다. 즉, 작업을보다 강력하게 만들고 오류를보다 적절하게 처리 할 수 있습니다. 사실
내가 몇 일 전에 같은 문제에 일하는이 내가 일을하는 방법입니다
예 :
CREATE PROCEDURE [dbo].[up_ImportProductsData]
AS
BEGIN
@Product_PK int, //Product primary key
@Product_Name NVarchar(30) // Product name
// we create a cursor on product temporay table
DECLARE c_Product CURSOR FOR
SELECT Product_PK,
Product_NAME,
FROM Product_tempory_table
//We open the cursor to check product pk one by one
OPEN c_Product CURSOR
FETCH c_Product CURSOR INTO
@Product_PK, @Product_Name
WHILE @@fetch_status=0
//Checking if the Product_PK exits
BEGIN
//If the PRimary key doesnt exists then we insert it
IF NOT EXISTS(SELECT * FROM dbo.Product_Table
WHERE [email protected]_PK)
BEGIN
INSERT INTO dbo.Product_Table
(
Product_PK,
Product_NAME
)
VALUES (
@Product_PK, @Product_Name
)
END
//If The primary key exists we update it
ELSE
BEGIN
UPDATE dbo.Product_Table
SET [email protected]_Name
WHERE Product_PK= @Product_PK
END
FETCH c_Product INTO
@Product_PK, @Product_Name
END
CLOSE c_Product
DEALLOCATE c_Product
END
당신이 사용하고있는 RDBMS
이것은 정말로 끔찍합니다, 미안 해요. 왜 훨씬 쉽고 투명하게 처리 할 수있는 ETL 프로그램 (3 단계에서 언급 했음)이있을 때 왜 커서를 사용하여 데이터 목록을 반복 할 수 있습니까?또한 ETL 도구/프로세스를 사용할 수있을 때이 많은 로직을 데이터베이스에 넣지 않아야합니다. – ydaetskcoR
이것들은 SQL Server에서 INSERT 스타일 시트 또는 http://stackoverflow.com/a/108416/2291321과 같이 쉽게 삽입 할 수있는 일렬 삽입과 커밋을 수행합니다. ON DUPLICATE KEY UPDATE'를 사용하거나 출력 컴포넌트에서 INSERT OR UPDATE 옵션을 사용하십시오. – ydaetskcoR
늦게 답장을 드려 죄송합니다. 예, 테이블을 직접 삽입/업데이트하는 대신 이러한 접근 방식을 요구할 수 있습니다. 내 제품은 실제 테이블을 사용하므로 삽입 중에 문제가 발생하면 제 제품이 작동하지 않게됩니다. 그래서 임시 테이블을 만드는이 접근법을 사용하는 것이 더 나을 것이라고 생각합니다. –
? 기억해 주시면 SQL Server를 사용하고 계시 겠지만 질문에 적절한 RDBMS 태그를 추가하여 여기에 설명하는 것이 유용 할 수 있습니다. 지금 당장 SQL Server 태그를 추가했습니다. 내가 틀렸다면 수정하십시오. – ydaetskcoR
예, SQL Server 만 사용하고 있습니다. 감사. –