google-cloud-platform - 是否可以在不使用 BigQuery 清理的情况下查询存储在云存储中的日志数据?
问题描述
我有大量从 StackDriver 导出到 Google Cloud Storage 的日志数据。我正在尝试使用 BigQuery 运行查询。
但是,在 BigQuery 数据集中创建表时,我得到了
Invalid field name "k8s-app".
Fields must contain only letters, numbers, and underscores, start with a letter or underscore, and be at most 128 characters long.
Table: bq_table
大量日志数据从 StackDriver sinks 导出,其中包含大量唯一列名。根据 BigQuery 表,其中一些名称无效。
解决方案是什么?有没有办法在不清理的情况下查询日志数据?使用临时表或其他东西?
注意:我不想将我的数据加载(放入)到 BigQuery Storage,只是为了查询 Google Cloud Storage 中存在的数据。
* 编辑 *
请参阅本文档以获得清晰的理解
解决方案
我认为您可以根据您的应用程序走以下两条路线中的任何一条:
A.忽略标题
如果有问题的字段位于日志的标题行中,您可以通过--skip_leading_rows=1
在导入命令中添加参数来选择忽略标题行。就像是:
bq location=US load --source_format=YOURFORMAT --skip_leading_rows=1 mydataset.rawlogstable gs://mybucket/path/* 'colA:STRING,colB:STRING,..'
B.加载原始数据
如果上述不适用,则只需将非结构化原始格式的数据加载到 BigQuery 中。一旦你的数据在那里,你就可以去做各种各样的事情。
因此,首先创建一个包含单列的表:
bq mk --table mydataset.rawlogstable 'data:STRING'
现在将您的数据集加载到提供适当位置的表中:
bq --location=US load --replace --source_format=YOURFORMAT mydataset.rawlogstable gs://mybucket/path/* 'data:STRING'
加载数据后,现在您可以使用 SQL 查询对其进行处理,并根据您的分隔符将其拆分并跳过您不喜欢的内容。
C.创建外部表
如果您不想将数据加载到 BigQuery 但仍想对其进行查询,则可以选择在 BigQuery 中创建外部表:
bq --location=US mk --external_table_definition=data:STRING@CSV=gs://mybucket/path/* mydataset.rawlogstable
查询数据
如果您选择选项 A 并且它适合您,您可以简单地选择以您已经在做的方式查询您的数据。
在您选择 B 或 C 的情况下,您的表现在将数据集中的行作为单列行。您现在可以选择根据您的分隔符要求将这些单列行拆分为多个列行。
假设您的行应该有 3 个名为 a、b 和 c 的列:
a1,b1,c1
a2,b2,c2
现在它全部采用名为 的单列形式data
,您可以通过分隔符将其分隔,
:
select
splitted[safe_offset(0)] as a,
splitted[safe_offset(1)] as b,
splitted[safe_offset(2)] as c
from (select split(data, ',') as splitted from `mydataset.rawlogstable`)
希望能帮助到你。
推荐阅读
- r - 在for循环中循环n页 - R
- react-native - 如何使用 react native 制作 vpn 应用程序
- bash - Increment version with 1 bash (awk)
- node.js - 如何从 node.js 中的发布请求发送响应?
- javascript - 如何在nodejs api调用上调用完整方法
- vue.js - 检测 vuex 状态变化以在 nuxt 布局内执行方法
- ios - 在 TableView 中选择单元格时获取标签文本(Swift)
- android - 购物车页面崩溃 FirebaseRecyclerAdapter 问题
- php - 使用 PHP 查询程序 firebird 数据库
- apache-flink - Apache Flink Stateful Functions 状态缩放