我们正在开发一个处理测井数据的项目。想法是
- 将日志数据从本地logstash更新到Google云存储
- 编写python脚本来插入从Google导入日志数据的作业
谷歌BigQuery的云存储
- 编写python脚本来处理BigQuery本身中的数据
注意。对于python脚本,我们正在考虑是在googleappengine上运行还是在googlecompute引擎上运行。在
问题是
- 这是实际的解决方案吗?在
- 日志数据的结构经常更改这将导致在插入到大查询。怎么我们要用python脚本来处理它?在
- 例如,我们必须在特定时间段重新运行日志数据。我们怎么能做到呢?需要编写python脚本吗?在
谢谢
Tags:
有人已经提到了streaming data solution,但是如果您试图移动一大块日志数据而不是建立一个连续的流,那么您可能希望改用异步加载作业。在
当在Google App Engine中使用时,GCS library的作用与大多数python文件库类似,可以将要导入的文件存储在云存储桶中:
您可以通过API创建加载作业,指示bigquery在云存储中加载CSV或换行分隔的JSON文件列表:(注意:您需要use oauth 2)
^{pr2}$如果要设置其他属性(如写入处置或跳过CSV文件中的行),可以阅读有关如何创建Big Query load jobs的详细信息。您还可以看到如何加载数据的other good examples,包括命令行提示。在
编辑:
要回答您更具体的问题:
是的。我们使用延迟任务将googleappengine日志导出到云存储并导入BigQuery。有些人使用了map reduce jobs,但如果你不需要洗牌或减少,这可能会有点过分。在
除非在消息到达大查询之前对其进行解析,否则这不应该是一个问题。更好的设计是将消息、时间戳、级别等移植到大型查询,然后在那里用查询对其进行摘要处理。在
流式传输数据不会给您备份,除非您自己在BigQuery中设置备份。使用上述方法将自动在Google云存储中为您提供备份,这是首选方法。在
要知道BigQuery是一个OLAP数据库,而不是事务性的,因此通常最好在每次添加更多日志数据时重建表,而不是尝试插入新数据。这是违反直觉的,但是BigQuery是为此而设计的,因为它一次can import 10,000 files / 1TB。用成百上千的工作记录可以很快地用成百上千的工作记录来写。如果您不关心备份日志,那么流式传输数据将是理想的选择。在
有一个用于streaming data directly into BigQuery的新API,它可能更适合您的用例。在
如果数据结构发生变化,可以让BigQuery遍历其表并进行相应的更新。流式传输原始数据将为您提供最大的灵活性,但代价是必须再次对数据进行后期处理。在
相关问题 更多 >
编程相关推荐