让Google BigQuery从csv字符串文件中推断出架构

时间:2018-02-13 14:33:20

标签: csv google-bigquery

我想将csv数据上传到BigQuery。当数据具有不同的类型(如string和int)时,它能够使用标题推断列名,因为标题都是字符串,而其他行包含整数。

  

BigQuery通过比较文件的第一行来推断标头   数据集中的其他行。如果第一行只包含字符串,   而其他行则没有,BigQuery假设第一行是a   标题行。

https://cloud.google.com/bigquery/docs/schema-detect

问题是当你的数据都是字符串......

您可以指定--skip_leading_rows,但BigQuery仍然不会将第一行用作变量的名称。

我知道我可以手动指定列名,但我不希望这样做,因为我有很多表。还有其他解决方案吗?

2 个答案:

答案 0 :(得分:3)

如果您的数据全部采用“字符串”类型,并且您的CSV文件的第一行包含元数据,那么我想很容易做一个快速的脚本来解析CSV的第一行并生成一个类似的“创建表”命令:

bq mk --schema name:STRING,street:STRING,city:STRING... -t mydataset.myNewTable

使用该命令创建一个新的(void)表,然后将CSV文件加载到该新表中(如上所述使用--skip_leading_rows)

14/02/2018:感谢Felipe的评论更新:

以上评论可以通过这种方式简化:

bq mk --schema `head -1 myData.csv` -t mydataset.myNewTable

答案 1 :(得分:1)

目前的API无法实现。您可以在公共BigQuery跟踪器https://issuetracker.google.com/issues/new?component=187149&template=0中提交功能请求。

作为解决方法,您可以在文件的第二行末尾添加单个非字符串值,然后在“加载”配置中设置allowJaggedRows选项。下行是你会在你的桌子上得到一个额外的列。如果不接受额外的列,则可以使用查询而不是加载,并选择*除了添加的额外列,但查询不是免费的。