我将 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']
Run Code Online (Sandbox Code Playgroud)
现在我想将 SQL 从 YAML 重构到一个文件中。根据这里,您可以将cat
文件或管道传送到bq
. 这可以在命令行上运行,没有任何问题。
但是,我无法让它与 Cloud Build 一起使用。我尝试了很多不同的组合,以及转义字符等,但无论我尝试什么,shell 都不会评估/执行反引号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`']
Run Code Online (Sandbox Code Playgroud)
我也尝试通过管道而不是使用cat
,但我得到了同样的错误。
我一定在这里遗漏了一些明显的东西,但我看不到它。我可以构建一个自定义 docker 映像,并将所有内容包装在 shell 脚本中,但如果可能的话,我宁愿不必这样做。
如何在构建步骤中使用 Cloud Build 和 shell 评估?
我们的工作/管道是将ParDo转换的结果写回GCS,即使用 TextIO.Write.to("gs://...")
我们注意到,当作业/管道完成时,它会在输出桶中留下许多0字节文件.
管道的输入来自GCS的多个文件,所以我假设结果是分片的,这很好.
但为什么我们得到空文件?
从Maven中拉出最新的SDK版本(0.4.150414),我们的工作现在失败了.
我们已经将它追溯到我们的一个类中使用的HashMap的反序列化,并且由ParDo转换引用.
观察:
processElement
调用之前正确填充HashMapprocessElement
方法中放置断点显示HashMap具有不同的对象ID(必须来自反序列化原始HashMap),但现在它是空的,即所有元素都已丢失.在最新版本的SDK中,序列化/反序列化功能有什么变化吗?
如果您需要,很高兴将我们的代码发送到反馈电子邮件.
希望为目前管理大量 excel/csv 文件的部门团队实施一个简单的数据存储。我们将让他们准备文件并将它们以 CSV 格式放入 GCS 存储桶中,然后将外部 BQ 表指向此(一切都很好)。
但是,如果他们运行查询并查看一些数据,然后想找到该数据实际上是从哪里提取的,我们如何找出(假设文件名中没有上下文线索)哪个文件包含其中的行?题?
我找不到任何与此相关的文档。time_partitioning_type=DAY 是 BigQuery 中对表进行分区的唯一方法吗?除了日期之外,该参数还可以采用其他值吗?
是否可以将云函数trigger-bucket
参数配置为GCS存储桶中的文件夹?
例如,假设我们有以下内容:
gs://a_bucket/a_folder
Run Code Online (Sandbox Code Playgroud)
--trigger-bucket gs://a_bucket
我需要在文件夹级别设置它,而不是在部署时设置,即--trigger-bucket gs://a_bucket/a_folder/
。
但是,我收到错误:
错误:(gcloud.beta.functions.deploy)参数 --trigger-bucket:无效值“gs://a_bucket/a_folder/”:存储桶只能包含小写拉丁字母、数字和字符。_-。它必须以字母或数字开头和结尾,长度为 3 到 232 个字符。您可以选择在存储桶名称前添加 gs:// 并在末尾附加 /。
https://cloud.google.com/sdk/gcloud/reference/beta/functions/deploy
根据BigQuery文档,分区表可以有2500个分区:
每个分区表的最大分区数 - 2,500
然而:
$ bq query --destination_table grey-sort-challenge:partitioning_magic.nyc_taxi_trips_partitioned --time_partitioning_field pickup_datetime --use_legacy_sql=false "select * from \`grey-sort-challenge.partitioning_magic.nyc_taxi_trips\`"
Run Code Online (Sandbox Code Playgroud)
查询字符串出错:处理作业'gray-sort-challenge时出错:bqjob_r37b076ef0d3c4338_000001626c539e6a_1':查询产生的分区太多,允许2000,查询产生至少2372个分区
是2000还是2500?
我有一个 GCS 存储桶US-WEST1
:
该存储桶有两个文件:
我创建了一个外部表定义来读取这些文件,如下所示:
此外部表定义所在的数据集也在US
.
当我查询它时:
SELECT
*
FROM
`grey-sort-challenge.bigtable.federated`
LIMIT
100
Run Code Online (Sandbox Code Playgroud)
..我收到以下错误:
错误:无法读取位置:us-west1
我测试过asia-northeast1
,它工作正常。
为什么这不适用于美国地区?