当前位置: 首页 > 知识库问答 >
问题:

使用GCP Dataflow PubSub到BigQuery模板时表列名问题

鲁波光
2023-03-14

我已经将消息发布到一个pub/sub主题,并尝试使用Dataflow和“Cloud pub/sub主题to BigQuery”模板将它们流式传输到BigQuery中。(阅读更多关于流媒体模板的信息。)

pub/sub消息中的某些字段名包含破折号(-),我无法控制破折号,而且Dataflow模板似乎希望目标BigQuery表中的字段名完全相同。BQ的一个限制是字段名中不允许使用破折号(-),但允许使用下划线。因此,尽管我在BQ中有params.gsm_level列,但我仍然得到如下错误:

{
  "errors" : [ {
    "debugInfo" : "",
    "location" : "params.gsm-level",
    "message" : "no such field.",
    "reason" : "invalid"
  } ],
  "index" : 0
}

我可以做什么来将消息中的GSM-Level映射到BQ中的GSM_Level,但仍然使用DF模板而不编写自己的工作吗?谢了!

共有1个答案

戚晨
2023-03-14

我能够使用带有帮助器函数的Javascript UDF来“清理”密钥名称:

function _transform(value){
    var objectConstructor = {}.constructor;
    var arrayConstructor = [].constructor;

    if (value.constructor === objectConstructor) {
        var out = {};
        for (var key in value) {
            if (value.hasOwnProperty(key)) {
                //console.log(key + " -> " + value[key]);
                var cleaned_key = key.replace(/-/g, '_');
                out[cleaned_key] = _transform(value[key]);
            }
        }
        return out;
    } else if (value.constructor === arrayConstructor) {
        var cleaned_arr = [];
        value.forEach(function(item, index) {
            cleaned_arr.push(_transform(item));
        });
        return cleaned_arr;
    } else {
        return value;
    }
}

也许有一个更干净的方法,但到目前为止这是有效的。

 类似资料:
  • 我正在尝试使用GCP模板执行管道:https://cloud.google.com/dataflow/docs/templates/provided-templates#cloud-storage-text-to-bigquery 但我得到了错误: 任何人都可以共享一个工作的CSV文件以用作运行该管道的输入吗?

  • 我正在PythonApacheBeamDataflow中进行一个项目,我需要根据启动数据流模板提供的运行时参数命名bigquery表。 到目前为止,我运气不好,它要么为我提供了运行时参数的定义,要么提供了一个空字符串。 所以我基本上需要这个来工作: 命名表中的写BigQuery函数是我有麻烦的地方,我也尝试使用custom_options.table_name,声明变量为全局等。 我已经创建了一个

  • 我对C模板非常陌生。我目前正在做一个项目,我需要使用模板实现双重链接列表。以下是我目前所拥有的: 然而,在我的析构函数中,为什么我不能访问节点元素?该方法中的代码现在已编译,但不会抛出错误。但是如果我尝试使用- 此外,我如何在函数头中初始化list==NULL,而不是在类之外进行初始化?

  • 问题内容: 我需要查询以在Bigquery中查找表(表元数据)的列名,例如SQL中的以下查询: 问题答案: 更新 :现在可以!请参阅下面的文档和答案。 回答,大约在2012年: 尽管这不是第一次请求,但当前无法通过查询检索表元数据(即列名和类型)。 您有理由将其作为查询吗?表格元数据可通过表格API获得。

  • 我想把BigQuery表名作为运行时参数传递给我的数据流模板,就像这样简单: 这个问题有一个解决方案:https://issues.apache.org/jira/browse/beam-1440,但到目前为止我还不明白结论。

  • 问题内容: 在(和)包中,具有以下签名: 到底是干什么用的?我已经扫描了文档(还有一些资料),但无济于事。我只是用一个空字符串实例化所有模板,这似乎没有什么不同。我为什么要打扰一个名字? 即使是命名模板,两者似乎是等效的: https://play.golang.org/p/wKzCHdLf2S 问题答案: 毫无疑问,模板的名称就是为模板 命名 。 到底有什么好处呢?只要您不想 引用 该模板,就没