출력의 SQL 정의 관리
Furnace의 표 형식 출력에는 여러 SQL 정의를 보관할 수 있습니다. 정의 하나는 쓰기 문장 하나 또는 BEGIN/COMMIT 트랜잭션 블록의 여러 문장입니다. 그중 하나가 Active이며 예약 또는 수동으로 테이블을 다시 빌드할 때 실행합니다.
활성 정의를 바꾸는 것은 이후 재빌드의 SQL을 바꾸는 작업입니다. 선택하는 순간 해당 SQL이 실행되지는 않습니다.
정의 보기와 선택
출력을 Dataset Preview에서 열고 Details > Job spec을 펼칩니다. 각 정의의 SQL 작업 유형, 마지막 실행, 쿼리 ID와 본문이 표시되며 활성 정의에는 Active 표지가 붙습니다.
옵션의 Set as active definition은 이후 재빌드에 사용할 정의를 정합니다. Open in SQL Studio는 SQL을 편집하거나 실행하는 화면으로 엽니다.
추가 쓰기와 adhoc
쓰기를 실행하면 출력마다 정의를 만듭니다. 첫 정의는 활성 상태가 됩니다. 이후 쓰기는 기존 정의를 보존하고 새 정의를 추가하여 활성화하지만 adhoc 힌트가 있으면 기존 활성 정의를 유지합니다. CREATE OR REPLACE TABLE은 다시 만든 출력의 기존 정의들을 교체하므로 별도 주의가 필요합니다.
/*+ adhoc */은 일회성 쓰기를 즉시 수행하고 추가 정의로 보관하되 Active를 바꾸지 않을 때 사용합니다.
과거 주문 보충 예시
가상의 /Sales/Orders가 일일 입력을 추가하는 활성 정의를 가진다고 가정합니다.
INSERT INTO `/Sales/Orders`
SELECT order_id, customer_id, order_date, total
FROM `/Sources/Orders daily`;
누락된 과거 주문을 발견하면 날짜 범위를 정하여 ad hoc 쓰기를 수행할 수 있습니다.
/*+ adhoc */
INSERT INTO `/Sales/Orders`
SELECT order_id, customer_id, order_date, total
FROM `/Sources/Orders history`
WHERE order_date < DATE '2026-01-01';
과거 행은 즉시 추가되고 SQL은 추가 정의로 남습니다. 이후 예약 및 수동 빌드는 계속 /Sources/Orders daily를 사용합니다. 예시 경로와 기준일은 실제 입력 및 보충 범위에 맞춰야 합니다.
Iceberg 속성 변경 예시
다음은 시간별 센서 입력을 추가하는 활성 정의입니다.
INSERT INTO `/Manufacturing/Sensor readings`
SELECT recorded_at, sensor_id, reading
FROM `/Sources/Sensor readings hourly`;
향후 파일에 zstd 압축을 사용하도록 속성을 한 번 바꾸려면 adhoc ALTER를 실행합니다.
/*+ adhoc */
ALTER TABLE `/Manufacturing/Sensor readings`
SET TBLPROPERTIES (
'write.parquet.compression-codec' = 'zstd'
);
기존 파일은 변경되지 않으며 이후 활성 정의 실행이 쓰는 파일부터 새 압축을 사용합니다. ALTER 문장이 다음 재빌드의 활성 정의가 되지는 않습니다.
계보
Data Lineage는 활성 정의뿐 아니라 보존된 비활성 및 adhoc 정의가 참조하는 입력도 표시합니다. 따라서 현재 Active SQL에 없는 입력이 계보에 나타날 수 있습니다.