Google bigquery 无法从需要分区筛选器的BigQuery表中提取

Google bigquery 无法从需要分区筛选器的BigQuery表中提取,google-bigquery,Google Bigquery,尝试从需要分区筛选器的BigQuery表提取数据时,提取作业失败 下面是一个创建表并运行提取作业的简单示例 package.com.example; 导入com.google.cloud.bigquery.*; 公共类BigQueryExtractTest{ 私有静态最终字符串项目\u ID=“我的项目ID”; 私有静态最终字符串数据集\u ID=“测试\u数据集”; 私有静态最终字符串GCS_LOCATION=“gs://my bucket/path/to/files/part-*”; 公共静

尝试从需要分区筛选器的BigQuery表提取数据时,提取作业失败

下面是一个创建表并运行提取作业的简单示例

package.com.example;
导入com.google.cloud.bigquery.*;
公共类BigQueryExtractTest{
私有静态最终字符串项目\u ID=“我的项目ID”;
私有静态最终字符串数据集\u ID=“测试\u数据集”;
私有静态最终字符串GCS_LOCATION=“gs://my bucket/path/to/files/part-*”;
公共静态void main(字符串[]args)引发异常{
//创建BigQuery客户端
BigQuery BigQuery=BigQueryOptions.newBuilder().setProjectId(项目ID).build().getService();
//创建需要分区筛选器的数据集和表
create(DatasetInfo.of(DATASET_ID));
query(QueryJobConfiguration.of(
String.format(“创建表%s.table1(\n),数据集\u ID)+
stringColumn字符串\n+
“timeColumn时间戳\n”+
“”)按日期划分的分区(时间列)\n+
“选项(\n”+
“需要\u分区\u筛选器=真\n”+
")"));
//提取表
Job Job=bigQuery.getTable(TableId.of(DATASET\u ID,“table1”))
.extract(“换行符分隔的JSON”,GCS\U位置)
.waitFor();
//错误时引发异常
if(job!=null&&job.getStatus().getError()!=null){
抛出新异常(job.getStatus().getError().toString());
}
}
}
上面的代码段产生以下错误

Exception in thread "main" java.lang.Exception: BigQueryError{reason=invalidQuery, location=query, message=Cannot query over table 'my-project-id.test_dataset.table1' without a filter that can be used for partition elimination}
    at com.example.BigQueryExtractTest.main(BigQueryExtractTest.java:34)
本例中使用的
googlecloudbigquery
maven依赖项如下所示


com.google.cloud
谷歌云大查询
1.23.0
该示例还使用依赖关系版本
0.34.0-beta


运行提取作业时如何指定分区筛选器?

这是一个错误,现在正在跟踪该问题。要解决此限制,可以使用
bq
命令行工具更新表以允许不使用分区过滤器的查询,执行导出,然后更新表以再次需要它。例如,对于摄取时间分区表:

bq update --time_partitioning_type=DAY --norequire_partition_filter \
    <dataset_name>.<table name>

... (perform the export)

bq update --time_partitioning_type=DAY --require_partition_filter \
    <dataset_name>.<table name>

... (resume querying the table)
bq更新--time\u partitioning\u type=DAY--norequire\u partition\u过滤器\
.
... (执行导出)
bq更新--时间分区类型=天--需要分区过滤器\
.
... (继续查询表)

听起来像个bug。您可以使用此信息(或此帖子的链接)作为临时解决方法,您可以关闭设置、提取设置,然后重新打开设置。谢谢@ElliottBrossard。刚刚提交。如何打开/关闭
require partition filter
设置?这对我很有用:
bq update--time\u partitioning\u type=DAY--norequire\u partition\u filter
。如果您使用的是基于列的分区,我认为您需要指定
--time\u partitioning\u field
。我在下面添加了这些信息作为一个答案,以便在其他人遇到同样的问题时更加明显。是的,这在@ElliottBrossard中起到了作用。谢谢