如何使用双管分隔符将gcs文件正确加载到gbq中

时间:2017-06-25 15:30:01

标签: google-bigquery google-cloud-storage

我现有的查询:

bq load --field_delimiter="||" --skip_leading_rows=1 source.taxassessor gs://taxassessor/OFFRS_5_0_TAXASSESSOR_0001_001.txt taxassessor.txt

我得到的错误是:

Not enough positional args, still looking for destination_table

我试图模仿Web UI中的命令,我无法重现,因为Web UI不允许双管分隔符(UI上的限制?或解决方案?)

我有两个问题:

  1. 如何修复当前查询
  2. 源文件OFFRS_5_0_TAXASSESSOR_0001_001.txt是许多源文件之一,文件名的最后三个字符显示该文件系列中的文件编号。我如何使用通配符,以便我可以获取文件002.txt,003.txt等类似OFFRS_5_0_TAXASSESSOR_0001 _ * .txt?
  3. 由于

1 个答案:

答案 0 :(得分:0)

  

如何使用通配符,以便我可以获取文件002.txt,003.txt等类似OFFRS_5_0_TAXASSESSOR_0001 _ * .txt?

按照你的建议行事,例如:

bq load --field_delimiter="||" --skip_leading_rows=1 source.taxassessor gs://taxassessor/OFFRS_5_0_TAXASSESSOR_0001_*.txt taxassessor.txt

它应该已经有用了。

  

如何修复当前查询?

不确定为什么你收到这条消息因为一切似乎都是正确的......但它仍然不应该工作,因为你的分隔符有2个字符而且它们应该只有一个(想象一下,例如你的文件有字符串"abcd|||efg||hijk|||l",很难分辨出分隔符在哪里;它是前两个管道还是最后一个管道。

如果您无法更改分隔符,您可以做的一件事就是将BigQuery中的所有内容保存为整个STRING字段。之后,您可以根据需要提取字段,例如:

WITH data AS(
  select "alsdkfj||sldkjf" as field UNION ALL
  select "sldkfjld|||dlskfjdslk"
)

SELECT SPLIT(field, "||") all_fields FROM data

all_fields将包含文件中的所有列,然后您可以将结果保存到其他表中或运行您想要的任何分析。

作为建议,如果您可以将此分隔符更改为其他内容,只有一个字符可能会更好。