Google bigquery 使用命令行在BigQuery中使用配置单元分区信息从GCS创建外部表

Google bigquery 使用命令行在BigQuery中使用配置单元分区信息从GCS创建外部表,google-bigquery,Google Bigquery,我在谷歌云存储中有一个具有以下命名层次结构的存储桶 gs://<bucket>/events/year=2020/month=03/day=23/hour=12 但是,当我尝试对外部表执行相同操作时,该表是使用配置单元分区信息创建的。但查询无法识别任何分区 bq mkdef --source_format=NEWLINE_DELIMITED_JSON --autodetect --hive_partitioning_mode=AUTO --hive_partitioning_sou

我在谷歌云存储中有一个具有以下命名层次结构的存储桶

gs://<bucket>/events/year=2020/month=03/day=23/hour=12
但是,当我尝试对外部表执行相同操作时,该表是使用配置单元分区信息创建的。但查询无法识别任何分区

bq mkdef --source_format=NEWLINE_DELIMITED_JSON --autodetect --hive_partitioning_mode=AUTO --hive_partitioning_source_uri_prefix="gs://<bucket>/events" --require_hive_partition_filter=True "gs://<bucket>/events/*" > <table_Def>

bq mk --dataset_id=<datasetId> --data_source=google_cloud_storage --external_table_definition=<tableDef> --schema=<schema> --table <tableName>

文件中指出,这应该得到支持。有人能告诉我这里遗漏了什么吗?

当你说“查询不起作用”时,你得到了什么结果?哪些是有效的?让我们比较一下。此外,您可以共享架构定义文件并验证BigQuess是否正确创建了该表?当我说查询不起作用时,我的意思是BigQuery不认为<代码>年份>代码>是一个列。它显示未知列,甚至没有运行。有效的查询是
SELECT*fromtable
。我检查了BigQuery是否正确创建了表,因为我可以看到模式定义中提供的所有列都被识别。我甚至可以将它们作为
bq list
命令的一部分打印回来。抱歉,我将无法将架构定义作为其IPR共享。但是模式不应该是这里的问题,因为它在我创建本机表时起作用。我使用bq mk创建了表,但它在查询时失败,错误为:“未能添加分区键年”。在没有模式的情况下,遵循您的步骤有点困难。但是,如果我将从作为外部表加载,并选择自动检测模式,则它适用于我的情况?哪些是有效的?让我们比较一下。此外,您可以共享架构定义文件并验证BigQuess是否正确创建了该表?当我说查询不起作用时,我的意思是BigQuery不认为<代码>年份>代码>是一个列。它显示未知列,甚至没有运行。有效的查询是
SELECT*fromtable
。我检查了BigQuery是否正确创建了表,因为我可以看到模式定义中提供的所有列都被识别。我甚至可以将它们作为
bq list
命令的一部分打印回来。抱歉,我将无法将架构定义作为其IPR共享。但是模式不应该是这里的问题,因为它在我创建本机表时起作用。我使用bq mk创建了表,但它在查询时失败,错误为:“未能添加分区键年”。在没有模式的情况下,遵循您的步骤有点困难。但是,如果我将从作为外部表加载并选择Auto Detect Schema,则它适用于我的情况。
SELECT * from table WHERE year=2020
bq mkdef --source_format=NEWLINE_DELIMITED_JSON --autodetect --hive_partitioning_mode=AUTO --hive_partitioning_source_uri_prefix="gs://<bucket>/events" --require_hive_partition_filter=True "gs://<bucket>/events/*" > <table_Def>

bq mk --dataset_id=<datasetId> --data_source=google_cloud_storage --external_table_definition=<tableDef> --schema=<schema> --table <tableName>
SELECT * from table WHERE year=2020