如何将多个csv文件(不同的架构)加载到bigquery中

时间:2019-02-12 14:44:59

标签: google-bigquery

我有6,500个具有约250个不同模式的csv文件。即这些文件来自F.D.I.C(美国银行监管机构)数据集。它们已上传到Google云存储桶: enter image description here

每个财政季度都有约250个不同的csv。一个财务季度内的每个csv具有不同的架构: enter image description here

大约有250个独特的架构。该模式在每个财务季度重复一次。 csv文件可追溯到1992年的100个财务季度: enter image description here

可以使用通配符上载具有相同架构的多个CSV。例如gs/path/*.csv。但是,不是从文件名自动生成每个表名。 UI需要一个表名作为输入: enter image description here

如何将多个具有不同架构的csv文件加载到bigquery中?

1 个答案:

答案 0 :(得分:1)

我要自动执行此操作的方法基本上是从给定存储桶(或其子文件夹)中读取所有文件,并使用它们的“文件名”(假设)作为要提取的目标表名。方法如下:

gsutil ls gs://mybucket/subfolder/*.csv | xargs -I{} echo {} | awk '{n=split($1,A,"/"); q=split(A[n],B,"."); print "mydataset."B[1]" "$0}' | xargs -I{} sh -c 'bq --location=US load --replace=false --autodetect --source_format=CSV {}'

请确保将locationmydataset替换为所需的值。另外,请注意以下假设:

  • 假定每个CSV的第一行都是标题,因此被视为列名。
  • 我们正在使用--replace=false标志进行写入,这意味着数据将在您每次运行命令时附加。如果您想改写,只需将其转到true,则每次运行都会覆盖所有表的数据。
  • CSV文件名(.csv之前的部分用作表名。您可以修改awk脚本以将其更改为任何其他替代名称。