Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
日記_digdagとHiveで詰まる

digdagとTDの組わせでhiveのクエリ結果をinsertしようとして詰まる。

スタンダードなクエリなら問題ないが、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
;

こうなる!!! 素敵!!

@fujimoto-pb

This comment has been minimized.

Copy link

@fujimoto-pb fujimoto-pb commented Mar 17, 2017

-- DIGDAG_INSERT_LINE
という魔法のコメントが有るらしい。。。
それで書き直した

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment