BigQuery-Apache Avro库无法解析标头,并显示以下错误:无效的数据文件。魔术不匹配

时间:2019-11-25 17:53:31

标签: python google-bigquery avro

我是第一次弄乱avro文件。

我得到了很多带有编码数据的csv文件,并且只是对应该发送到BigQuery的数据进行了python处理。最后,我得到了在avsc中收到的带有csv数据的架构图。到目前为止,一切都很好。

现在,我了解到我需要在BigQuery中创建将接收此数据的表。我只是试图创建一个空白表并插入接收到的模式,但是没有。我得到以下信息:“读取数据时出错,错误消息:Apache Avro库无法解析标头,并显示以下错误:无效的数据文件。Magic不匹配:gs://xxx/xxx/test.avsc” 。我试图通过以下在线页面将avsc转换为json:https://json-schema-validator.herokuapp.com/avro.jsp,但未成功。

这是过程路径吗?因为我可以在解码后生成记录,所以我知道该架构是不正确的。所以我怀疑我在做正确的事。

1 个答案:

答案 0 :(得分:0)

您无法使用avsc文件创建表架构。您可以从CSVAVRO(未压缩)加载数据并启用模式自动检测。另外,如果文件位于本地数据源上,请查看this

由于您使用的是python和CSV文件,因此可以尝试以下操作:

from google.cloud import bigquery
client = bigquery.Client()
filename = '/path/to/file.csv'
dataset_id = 'my_dataset'
table_id = 'my_table'

dataset_ref = client.dataset(dataset_id)
table_ref = dataset_ref.table(table_id)
job_config = bigquery.LoadJobConfig()
job_config.source_format = bigquery.SourceFormat.CSV
job_config.skip_leading_rows = 1
job_config.autodetect = True

with open(filename, "rb") as source_file:
    job = client.load_table_from_file(source_file, table_ref, job_config=job_config)

job.result()  # Waits for table load to complete.

print("Loaded {} rows into {}:{}.".format(job.output_rows, dataset_id, table_id))