【问题标题】:Unable to create scheduled query with multiple SQL statements on BigQuery via sdk无法通过 sdk 在 BigQuery 上创建包含多个 SQL 语句的计划查询
【发布时间】:2021-06-23 01:03:28
【问题描述】:

我有 2 个 SQL 语句,它们是 DELETEINSERTINSERT 必须在 DELETE 之后运行。我计划通过 sdk bg mk 使用 DELETE ...; INSERT ...; 语句创建预定查询

但是,我可以通过来自 sdk 的 1 条语句(DELETEINSERT)成功创建预定查询

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'.

注意

  • 我可以通过云控制台 (UI) 使用多个 SQL 语句创建计划查询。

更新

完整的命令

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语句

【问题讨论】:

  • 你可以尝试使用数组吗? --params='{"query": ["DELETE ...; ","INSERT ...;"]}'
  • @guillaumeblaquiere 它不起作用 ;( BigQuery error in mk operation: Parameter type required for query: STRING, Parameter type provided in transfer config: list_value. Config name: 谢谢
  • 我发布了一个虚拟答案(格式比评论更好)。这个对我有用。你能分享更多关于你的命令的信息吗?
  • 您能与我们分享您的 Google SDK 工具包版本吗?
  • @Nick_Kh Google Cloud SDK 334.0.0 alpha 2021.03.26 bq 2.0.66 核心 2021.03.26 gsutil 4.60

标签: google-cloud-platform google-bigquery google-cloud-sdk


【解决方案1】:

它对我来说就像一个魅力

  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

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

【讨论】:

  • 我将完整命令更新为原始问题。该命令不是实际的,而是类似的。谢谢!
  • 您忘记参数值中的{"query":} 是否正常? (在您的问题更新中)。这是一个错字还是你真正的问题?
猜你喜欢
  • 2021-03-15
  • 1970-01-01
  • 2021-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-28
相关资源
最近更新 更多