在 Cloud Build 步骤中执行 BigQuery 查询
Execute a BigQuery query in Cloud Build step
我将 Cloud Build 与 gcloud
构建器一起使用。我将 entrypoint
覆盖为 bq
,这样我就可以在我的构建步骤中 运行 一些 BigQuery SQL。以前,我将 SQL 直接嵌入到 Cloud Build 的 YAML 配置中。这很好用:
steps:
- name: gcr.io/cloud-builders/gcloud
entrypoint: 'bq'
args: ['query', '--use_legacy_sql=false', 'SELECT 1']
现在我想将 SQL 从 YAML 重构到一个文件中。根据 here,您可以 cat
文件或通过管道将其传输到 bq
。这在命令行上没有任何问题。
但是,我无法让它与 Cloud Build 一起使用。我尝试了很多不同的组合,转义字符等,但无论我尝试什么 shell 都不会 evaluate/execute cat my_query.sl
反引号,而是认为它是查询本身:
工作正常:
在 Cloud Build 中构建它不会工作:
steps:
- name: gcr.io/cloud-builders/gcloud
entrypoint: 'bq'
args: ['query', '--use_legacy_sql=false', '`cat my_query.sql`']
我也尝试过使用管道而不是使用 cat
,但我得到了同样的错误。
我一定是遗漏了一些明显的东西,但我看不到。我可以构建自定义 docker 图像,并将所有内容包装在 shell 脚本中,但如果可能的话我宁愿不必这样做。
如何在构建步骤中使用带有 shell 评估的 Cloud Build?
您可以创建自定义 Bash 脚本,例如:
#!/bin/bash
if [ $# -eq 0 ]; then
echo "No arguments supplied"
fi
bq query --use_legacy_sql=false <
将其命名为 run_query.sh
,然后将您的步骤定义为:
steps:
- name: gcr.io/cloud-builders/gcloud
entrypoint: 'bash'
args: ['run_query.sh', 'my_query.sql']
免责声明:这是基于阅读文档,但我没有实际使用 Cloud Build。
我已经这样做了:
- name: 'gcr.io/cloud-builders/gcloud'
entrypoint: 'bash'
dir: 'my/directory'
args: ['-c', 'bq --project_id=my-project-name query --use_legacy_sql=false < ./my_query.sql']
与 gcloud builds submit ...
一起使用,如果您愿意,可以删除一个文件。
我将 Cloud Build 与 gcloud
构建器一起使用。我将 entrypoint
覆盖为 bq
,这样我就可以在我的构建步骤中 运行 一些 BigQuery SQL。以前,我将 SQL 直接嵌入到 Cloud Build 的 YAML 配置中。这很好用:
steps:
- name: gcr.io/cloud-builders/gcloud
entrypoint: 'bq'
args: ['query', '--use_legacy_sql=false', 'SELECT 1']
现在我想将 SQL 从 YAML 重构到一个文件中。根据 here,您可以 cat
文件或通过管道将其传输到 bq
。这在命令行上没有任何问题。
但是,我无法让它与 Cloud Build 一起使用。我尝试了很多不同的组合,转义字符等,但无论我尝试什么 shell 都不会 evaluate/execute cat my_query.sl
反引号,而是认为它是查询本身:
工作正常:
在 Cloud Build 中构建它不会工作:
steps:
- name: gcr.io/cloud-builders/gcloud
entrypoint: 'bq'
args: ['query', '--use_legacy_sql=false', '`cat my_query.sql`']
我也尝试过使用管道而不是使用 cat
,但我得到了同样的错误。
我一定是遗漏了一些明显的东西,但我看不到。我可以构建自定义 docker 图像,并将所有内容包装在 shell 脚本中,但如果可能的话我宁愿不必这样做。
如何在构建步骤中使用带有 shell 评估的 Cloud Build?
您可以创建自定义 Bash 脚本,例如:
#!/bin/bash
if [ $# -eq 0 ]; then
echo "No arguments supplied"
fi
bq query --use_legacy_sql=false <
将其命名为 run_query.sh
,然后将您的步骤定义为:
steps:
- name: gcr.io/cloud-builders/gcloud
entrypoint: 'bash'
args: ['run_query.sh', 'my_query.sql']
免责声明:这是基于阅读文档,但我没有实际使用 Cloud Build。
我已经这样做了:
- name: 'gcr.io/cloud-builders/gcloud'
entrypoint: 'bash'
dir: 'my/directory'
args: ['-c', 'bq --project_id=my-project-name query --use_legacy_sql=false < ./my_query.sql']
与 gcloud builds submit ...
一起使用,如果您愿意,可以删除一个文件。