谷歌云存储<>谷歌应用引擎>谷歌大查询

2024-04-24 09:15:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我们正在开发一个处理测井数据的项目。想法是

  • 将日志数据从本地logstash更新到Google云存储
  • 编写python脚本来插入从Google导入日志数据的作业 谷歌BigQuery的云存储
  • 编写python脚本来处理BigQuery本身中的数据

注意。对于python脚本,我们正在考虑是在googleappengine上运行还是在googlecompute引擎上运行。在

问题是

  • 这是实际的解决方案吗?在
  • 日志数据的结构经常更改这将导致在插入到大查询。怎么我们要用python脚本来处理它?在
  • 例如,我们必须在特定时间段重新运行日志数据。我们怎么能做到呢?需要编写python脚本吗?在

谢谢


Tags: 数据项目引擎脚本google作业解决方案bigquery
2条回答

有人已经提到了streaming data solution,但是如果您试图移动一大块日志数据而不是建立一个连续的流,那么您可能希望改用异步加载作业。在

当在Google App Engine中使用时,GCS library的作用与大多数python文件库类似,可以将要导入的文件存储在云存储桶中:

import cloudstorage as gcs

filePath = "/CloudStorageBucket/dir/dir/logs.json"
with gcs.open(filePath, "w") as f:
    f.write(SomeLogData)
    f.close()

您可以通过API创建加载作业,指示bigquery在云存储中加载CSV或换行分隔的JSON文件列表:(注意:您需要use oauth 2

^{pr2}$

如果要设置其他属性(如写入处置或跳过CSV文件中的行),可以阅读有关如何创建Big Query load jobs的详细信息。您还可以看到如何加载数据的other good examples,包括命令行提示。在

编辑:

要回答您更具体的问题:

Is this practical solution?

是的。我们使用延迟任务将googleappengine日志导出到云存储并导入BigQuery。有些人使用了map reduce jobs,但如果你不需要洗牌或减少,这可能会有点过分。在

Structure of log data changes quite often this will cause an error when insert to BigQuery.How we going to handle it in python script?

除非在消息到达大查询之前对其进行解析,否则这不应该是一个问题。更好的设计是将消息、时间戳、级别等移植到大型查询,然后在那里用查询对其进行摘要处理。在

Incase, we have to rerun log data in particular period. How we can do that? need to write python script?

流式传输数据不会给您备份,除非您自己在BigQuery中设置备份。使用上述方法将自动在Google云存储中为您提供备份,这是首选方法。在

要知道BigQuery是一个OLAP数据库,而不是事务性的,因此通常最好在每次添加更多日志数据时重建表,而不是尝试插入新数据。这是违反直觉的,但是BigQuery是为此而设计的,因为它一次can import 10,000 files / 1TB。用成百上千的工作记录可以很快地用成百上千的工作记录来写。如果您不关心备份日志,那么流式传输数据将是理想的选择。在

有一个用于streaming data directly into BigQuery的新API,它可能更适合您的用例。在

Instead of using a job to load data into BigQuery, you can choose to stream your data into BigQuery one record at a time by using the tabledata().insertAll() method. This approach enables querying data without the delay of running a load job. There are several important trade-offs to consider before choosing an approach.

如果数据结构发生变化,可以让BigQuery遍历其表并进行相应的更新。流式传输原始数据将为您提供最大的灵活性,但代价是必须再次对数据进行后期处理。在

相关问题 更多 >