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

Max*_*lot 1 csv google-bigquery

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

BigQuery 通过将文件的第一行与数据集中的其他行进行比较来推断标题。如果第一行仅包含字符串,而其他行不包含,则 BigQuery 会假定第一行是标题行。

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

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

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

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

Sou*_*gna 5

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

bq mk --schema name:STRING,street:STRING,city:STRING... -t mydataset.myNewTable
Run Code Online (Sandbox Code Playgroud)

使用该命令创建一个新的(空)表,然后将 CSV 文件加载到该新表中(如您提到的那样使用 --skip_leading_rows )

2018 年 2 月 14 日:感谢 Felipe 的评论进行更新:

上面的评论可以这样简化:

bq mk --schema `head -1 myData.csv` -t mydataset.myNewTable
Run Code Online (Sandbox Code Playgroud)

  • 好的。因此,这意味着创建命令可以更加简化:`bq mk --schema \`head -1 myData.csv\` -t mydataset.myNewTable` (2认同)