在Cloud Build步骤中执行BigQuery查询

时间:2019-03-26 03:04:30

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

我正在将Cloud Build与def __init__(self, *args, **kwargs): initial = kwargs.get('initial') or {} instance = kwargs.get('instance') if instance: if instance.is_md: initial['content_md'] = instance.content else: initial['content_ck'] = instance.content kwargs.update({'instance':instance,'initial':initial}) super().__init__(*args,**kwargs) 构建器一起使用。我将gcloud改写为entrypoint,因此可以在构建步骤中运行一些BigQuery SQL。以前,我将SQL直接嵌入到Cloud Build的YAML配置中。效果很好:

bq

现在,我想将SQL从YAML重构到文件中。根据{{​​3}},您可以steps: - name: gcr.io/cloud-builders/gcloud entrypoint: 'bq' args: ['query', '--use_legacy_sql=false', 'SELECT 1'] 将该文件或通过管道传输到cat。这可以在命令行上正常使用。

但是,我无法使其与Cloud Build一起使用。我尝试了很多不同的组合,并转义了字符等。但是无论我尝试什么,shell都不会评估/执行bq反引号,而是认为它就是查询本身:

工作正常: here

在Cloud Build中构建无法使用:

cat my_query.sl

enter image description here

我也尝试使用管道进行传输,而不是使用steps: - name: gcr.io/cloud-builders/gcloud entrypoint: 'bq' args: ['query', '--use_legacy_sql=false', '`cat my_query.sql`'] ,但出现相同的错误。

我肯定在这里缺少明显的东西,但是我看不到。我可以构建一个自定义的docker映像,并将所有内容包装在shell脚本中,但是我宁愿不必这样做(如果可能)。

如何在构建步骤中将Cloud Build与Shell评估一起使用?

2 个答案:

答案 0 :(得分:1)

您可以创建自定义的Bash脚本,例如:

#!/bin/bash
if [ $# -eq 0 ]; then
  echo "No arguments supplied"
fi
bq query --use_legacy_sql=false < $1

将此名称命名为run_query.sh,然后将您的步骤定义为:

steps:
- name: gcr.io/cloud-builders/gcloud
  entrypoint: 'bash'
  args: ['run_query.sh', 'my_query.sql']

免责声明:这是基于阅读文档的内容,但是我实际上并没有使用Cloud Build。

答案 1 :(得分:0)

我已经这样做了:

- 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 ...一起使用,并根据需要删除一个文件。