【问题标题】:Delimit BigQuery REGEXP_EXTRACT strings in Google Cloud Build YAML script在 Google Cloud Build YAML 脚本中分隔 BigQuery REGEXP_EXTRACT 字符串
【发布时间】:2020-07-02 12:08:51
【问题描述】:

我有一个在 BigQuery 控制台中创建视图的复杂查询。 我已将其简化为以下内容以说明问题

SELECT
REGEXP_EXTRACT(FIELD1,  r"[\d]*") as F1,
REGEXP_REPLACE(FIELD2, r"\'", "") AS F2,
FROM `project.mydataset.mytable`

现在我正在尝试使用云构建自动创建视图。 我无法锻炼如何在正则表达式中分隔字符串以同时使用 yaml 和 SQL。

- name: 'gcr.io/cloud-builders/gcloud'
entrypoint: 'bq'
args: [
'mk',
'--use_legacy_sql=false',
'--project_id=${_PROJECT_ID}',
'--expiration=0',
'--view= 
    REGEXP_EXTRACT(FIELD1,  r"[\d]*") as F1 ,
    REGEXP_REPLACE(FIELD2, r"\'", "") AS F2,
    REGEXP_EXTRACT(FIELD3,  r"\[(\d{3,12}).*\]") AS F3
    FROM `project.mydataset.mytable`" 
    '${_TARGET_DATASET}.${_TARGET_VIEW}'
  ]

我收到以下错误

未能触发构建:解组构建配置失败 cloudbuild/build-views.yaml: json: 无法将数字解组到 Go 字符串类型的值

我已尝试使用 Cloud Build 替换参数以及 SQLYAML 转义序列的尽可能多的组合,以找到可行的解决方案。

【问题讨论】:

标签: google-bigquery yaml google-cloud-build


【解决方案1】:

一般情况下,您希望在这种情况下使用block scalars,因为它们不会处理其中的任何特殊字符并通过缩进终止。

我不知道该命令的外观应该如何,但这里有一些至少是有效的 YAML:

- name: 'gcr.io/cloud-builders/gcloud'
  entrypoint: 'bq'
  args:
  - 'mk'
  - '--use_legacy_sql=false'
  - '--project_id=${_PROJECT_ID}'
  - '--expiration=0'
  - >- # folded block scalar; newlines are folded into spaces
    --view= 
    REGEXP_EXTRACT(FIELD1,  r"[\d]*") as F1,
    REGEXP_REPLACE(FIELD2, r"\'", "") AS F2,
    REGEXP_EXTRACT(FIELD3,  r"\[(\d{3,12}).*\]") AS F3
    FROM `project.mydataset.mytable`" 
    '${_TARGET_DATASET}.${_TARGET_VIEW}'
  - dummy value to show that the scalar ends here

折叠块标量以 > 开头,下面的减号告诉 YAML 不要将最后的换行符附加到其值。

【讨论】:

  • 谢谢,这行得通。我还发现在本地提交构建作业可以提供更好的诊断并避免检查步骤。 > gcloud 构建提交 --config=cloudbuild.yaml
猜你喜欢
  • 2023-02-02
  • 1970-01-01
  • 2023-03-28
  • 2018-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-21
  • 2021-06-01
相关资源
最近更新 更多