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

Posted

技术标签:

【中文标题】通过python代码将谷歌云存储中的数据上传到分区表【英文标题】:Uploading data in google cloud storage to a partitioned table through python code 【发布时间】:2017-11-07 11:36:49 【问题描述】:

我在 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 命令可能是要修改的命令,但我不确定。

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

【问题讨论】:

【参考方案1】:

首先你应该从非分区表迁移到分区表,为此你可以看这里:https://***.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

仅此而已:)

【讨论】:

【参考方案2】:

有没有什么方法可以在不使用查询的情况下从非分区转换为分区,因为对于海量数据来说这可能非常昂贵?

【讨论】:

以上是关于通过python代码将谷歌云存储中的数据上传到分区表的主要内容,如果未能解决你的问题,请参考以下文章

将谷歌云存储文件夹挂载到谷歌人工智能平台作业

如何将谷歌云自然语言实体情感响应转换为 Python 中的 JSON/dict?

使用 python 将历史数据从谷歌云存储移动到日期分区的 bigquery 表

将谷歌云平台中的目录移动到根目录

将谷歌存储桶中的所有 .csv 文件读取到一个大熊猫 df 中,然后以 .csv 格式保存到另一个桶中

我们可以将谷歌云 SQL 与 Amazon Elastic Beanstalk 一起使用吗