スタンダードなクエリなら問題ないが、WITHとか使ってるとうまくクエリが動かない。
理由は、INSERT INTO TABLE result
が頭に挿入され WITHと喧嘩するから。
この場合は、クエリ内にINSERTと書いて回避する。
test.dig
+insert_test:
td>: test.hive.sql
engine: hive
insert_into: result
test.hive.sql
WITH
tmp_log AS(
SELECT *
FROM test.log
)
SELECT *
FROM tmp_log
;
これを実行すると下のクエリとして実行されてしまう。
※ 頭にINSERTが入る。。
INSERT INTO TABLE `result`
WITH
tmp_log AS(
SELECT *
FROM test.log
)
SELECT *
FROM tmp_log
;
こうなる。。。実行時にエラー。。。悲しい。
test.dig
+insert_predict:
td>: test.hive.sql
engine: hive
test.hive.sql
WITH
tmp_log AS(
SELECT *
FROM test.log
)
INSERT INTO TABLE `result`
SELECT *
FROM tmp_log
;
手動でINSERTを書いてもいいがもっといいのがあった。 DIGDAG_INSERT_LINE というコメントを入れるとその箇所にINSERT分が挿入される!
-- DIGDAG_INSERT_LINE
test.dig
+insert_test:
td>: test.hive.sql
engine: hive
insert_into: result
test.hive.sql
WITH
tmp_log AS(
SELECT *
FROM test.log
)
-- DIGDAG_INSERT_LINE
SELECT *
FROM tmp_log
;
↓
WITH
tmp_log AS(
SELECT *
FROM test.log
)
INSERT INTO TABLE `result`
SELECT *
FROM tmp_log
;
こうなる!!! 素敵!!
-- DIGDAG_INSERT_LINE
という魔法のコメントが有るらしい。。。
それで書き直した