通过python代码将谷歌云存储中的数据上传到分区表

时间:2017-11-07 11:36:49

标签: python google-bigquery

我有一个存储在GoogleCloud存储中的巨大日志表。查询它变得越来越昂贵,我必须找到一个解决方案,我认为这是分区表。

我可以自己管理将旧数据从大表上传到新创建的分区数据,但是我正在努力修改现有的python代码,即每天从存储器向biguqery表加载数据。我希望它提供已经按不同日期划分的数据。

def bq_load(filename):
    bq_load_cmd = 'bq load --skip_leading_rows=1 --source_format=' + format + ' ' + schema + '.' + table + ' ' + google_bucket + '/' + filename
    print bq_load_cmd
    bq_load_cmd_out = commands.getstatusoutput(bq_load_cmd)
    print bq_load_cmd_out
    bq_status = bq_load_cmd_out[0]
    if bq_status == 0:
        print 'Bq load successfull filename : ' + filename
    else:
        print 'Error loading the file in bq : ' + filename
        mail_cmd = 'mail -s " bq load error hasoffer_clicks" '  + recipient + ' < /dev/null'
        mail_cmd = commands.getstatusoutput(mail_cmd)

这是我现在正在使用的代码的一部分,它位于crontab中,并且每天将csv文件加载到BigQuery的表中。 我通过互联网搜索,但到目前为止,我还没有设法理解哪个是我的问题的正确解决方案。我认为bq load命令可能是要修改的命令,但我不确定。

有什么建议吗? 亲切的问候, 欧金尼奥

2 个答案:

答案 0 :(得分:0)

首先,您应该从非分区表迁移到分区,为此您可以在此处查看:https://stackoverflow.com/questions/38993877/migrating-from-non-partitioned-to-partitioned-tables

其次,要将数据插入到您应该在代码修饰器中使用的特定分区中:

table + '$20171107'

如果您需要有关插入特定分区的更多详细信息,请查看此处:https://cloud.google.com/bigquery/streaming-data-into-bigquery#bigquery-stream-data-python

这就是全部:)

答案 1 :(得分:0)

有没有办法在不使用查询的情况下从非分区转换为分区,因为对于大量数据而言可能相当昂贵?