首页 > 解决方案 > 无法通过 sdk 在 BigQuery 上使用多个 SQL 语句创建计划查询

问题描述

我有 2 个 SQL 语句,它们是DELETEINSERTINSERT必须在DELETE. 我打算DELETE ...; INSERT ...;通过 sdk 创建一个带有语句的预定查询bg mk

但是,我能够使用来自 sdk 的仅 1 条语句(DELETE或)成功创建计划查询INSERT

bq mk \
    --transfer_config \
    --project_id='my-proj-id' \
    --schedule='every day 00:01' \
    --target_dataset='my_dataset' \
    --display_name='query_name' \
    --params='{"query": "DELETE ..."}' \
    --data_source=scheduled_query

当我尝试

bq mk \
    --transfer_config \
    --project_id='my-proj-id' \
    --schedule='every day 00:01' \
    --target_dataset='my_dataset' \
    --display_name='query_name' \
    --params='{"query": "DELETE ...; INSERT ...;"}' \
    --data_source=scheduled_query

计划查询已成功创建,但运行失败,出现错误

Error code 9 : Dataset specified in the query ('') is not consistent with Destination dataset 'my_dataset'.

注意


更新

完整的命令

bq mk \
    --transfer_config \
    --project_id='my-proj-id' \
    --schedule='every day 00:01' \
    --target_dataset="my_dataset" \
    --display_name='del-insert-test' \
    --params='{"query": "DELETE FROM my-proj-id.my_dataset.my_table WHERE DATE(timestamp) = DATE_ADD(CURRENT_DATE(), INTERVAL -1 DAY); INSERT INTO my-proj-id.my_dataset.my_table SELECT res.col_a, res.col_b, res.col_c, timestamp FROM my-proj-id.my_dataset.my_raw_table, UNNEST (result) as res WHERE DATE(timestamp) = DATE_ADD(CURRENT_DATE(), INTERVAL -1 DAY);"}' \
    --data_source=scheduled_query

请注意,SQL 语句不是实际的,但它是类似的,并且我能够在云控制台上成功运行 SQL 语句

标签: google-cloud-platformgoogle-bigquerygoogle-cloud-sdk

解决方案


它对我来说就像一个魅力

  bq mk \
        --transfer_config \
        --project_id='gdglyon-cloudrun' \
        --schedule='every day 00:01' \
        --target_dataset='dlp_test' \
        --display_name='query_name' \
        --params='{"query": "DELETE from `gdglyon-cloudrun.dlp_test.name` where id=11;INSERT INTO `gdglyon-cloudrun.dlp_test.name` VALUES (11,111,\"@me.com\");"}' \
        --data_source=scheduled_query

你能分享更多关于你的要求吗?


推荐阅读