使用命令行工具将数据从 Datastore 加载到 BigQuery 时,是什么决定了子字段的包含?

When loading data from Datastore into BigQuery with the command line tool, what determines the inclusion of subfields?

在使用命令行工具从 Datastore 加载到 BigQuery 时,我注意到以下奇怪行为。当我使用选项 projection_fields 指定要包含的字段时,有一个相当复杂的嵌套字段,其子字段并未全部包含在内。我无法确定子字段选择的模式。奇怪的是,如果我不指定 projection_fields(即包括所有字段),则包括所有子字段。 (至少我必须这样假设,因为这些子字段之一实际上导致了错误,请参阅 。)

我没能找到 projection_fields 的任何解释,除了它只能用于顶级字段。此行为背后是否有某种设计或它是一个错误?

您问题的答案在 official documentation for Jobs 配置中(向下滚动至 "configuration.load.projectionFields")。它确实说了以下内容(强调我的):

"If sourceFormat is set to "DATASTORE_BACKUP",表示要从 Cloud Datastore 备份加载到 BigQuery 中的实体属性。属性 名称区分大小写, 必须是顶级的级别属性 。如果未指定属性,BigQuery 将加载所有属性。如果在 Cloud Datastore 备份中未找到任何名为 属性 的属性,则会在作业结果中返回无效错误。"

所以,回答你的问题,确实是设计使然。

我相信排除的子字段只是那些 null 无处不在的子字段。问题中提到的错误有不同的原因,并不意味着在未设置 projection_fields 时会加载这些子字段。