当从GCS上传csv到BigQuery时,是否有方法提供模式或自动检测模式?

weylhg0b  于 4个月前  发布在  其他
关注(0)|答案(3)|浏览(74)

我正在尝试从Google Cloud Storage(GCS)上传一个CSV文件到BigQuery(BQ)并自动检测模式。
我试图做的是启用自动检测模式,并输入行数跳过“标题行跳过”选项。我有6行包含有关我需要跳过的数据的描述性信息。第7行是我的实际标题行。
根据Google的文档:https://cloud.google.com/bigquery/docs/schema-detect#auto-detect:
字段类型基于具有最多字段的行。因此,只要每个列/字段中至少有一行数据具有值,自动检测就应按预期工作。
我的CSV的问题是,在我的行中有null的意义上,上述条件不满足。
此外,我的CSV包含许多不包含任何数值的行,我认为这为Google的模式自动检测增加了额外的复杂性。
自动检测没有检测到正确的列名或正确的字段类型。所有字段类型都被检测为字符串和列名,并指定为:string_field_0,string_field_1,string_field_3,...等。它还将我的CSV的列名作为一行数据传递。
我想知道我可以做些什么来正确地上传这个CSV到BQ,跳过前面不需要的行,并有正确的模式(字段名称和字段类型)。

1mrurvl1

1mrurvl11#

在阅读了一些文档之后,特别是CSV头部分,我认为您所观察到的是预期的行为。
另一种方法是手动指定数据的模式。

1aaf6o9v

1aaf6o9v2#

例如,您可以尝试使用bigquery-schema-generator等工具从csv文件生成模式,然后在bq load作业中使用它。

z9gpfhce

z9gpfhce3#

解决这个问题的方法是在CSV中包含我的实际标题行,并将其包含在要跳过的行数中。
我有6行我实际上需要跳过。第7行是我的标题(列名)。我在标题行中输入6跳过。
当我输入7而不是6时,模式被正确地自动检测到。
此外,我意识到,在谷歌的文档中的这句话:“字段类型是基于具有最多字段的行。因此,只要在每个列/字段中至少有一行数据具有值,自动检测就应该按预期工作。",空值被认为是值,所以这实际上并没有导致上传到BQ的问题。
希望这对遇到同样问题的人有所帮助!

相关问题