我有6,500个具有约250个不同模式的csv文件。即这些文件来自F.D.I.C(美国银行监管机构)数据集。它们已上传到Google云存储桶:
每个财政季度都有约250个不同的csv。一个财务季度内的每个csv具有不同的架构:
大约有250个独特的架构。该模式在每个财务季度重复一次。 csv文件可追溯到1992年的100个财务季度:
可以使用通配符上载具有相同架构的多个CSV。例如gs/path/*.csv
。但是,不是从文件名自动生成每个表名。 UI需要一个表名作为输入:
如何将多个具有不同架构的csv文件加载到bigquery中?
答案 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 {}'
请确保将location
,mydataset
替换为所需的值。另外,请注意以下假设:
--replace=false
标志进行写入,这意味着数据将在您每次运行命令时附加。如果您想改写,只需将其转到true
,则每次运行都会覆盖所有表的数据。.csv
之前的部分用作表名。您可以修改awk脚本以将其更改为任何其他替代名称。