Google BigQuery 的 PubSub 未写入 JSON

Google PubSub to BigQuery not writing JSON

嗨,

我正在尝试使用标准 PubSub to BigQuery 模板将数据从 Pub/Sub 发送到 BigQuery。我已经向主题发布了一些消息,但如果我有一个嵌套的 JSON,它会失败,即转到错误 table,并出现以下错误:

{"errors":[{"debugInfo":"","location":"event_data_decrypted","message":"This field: event_data_decrypted is not a record.","reason":"invalid"}],"index":0}

我发给Pub/Sub的例子JSON是这样的:

{
    "event_id": "958dc0a1-40e0-458f-9ea0-3c231ca0c986",
    "event_name": "labeled",
    "event_time": "2022-03-22T14:19:48.514Z",
    "prescription_id": "332634da-85a9-4ffe-b856-a3b05f25d9d9",
    "event_data_decrypted": {
        "PrescriptionDate": "2022-03-23T00:00:00",
        "OrganisationId": 1,
        "PrescriptionSourceType": 10,
        "EpsTokenId": "6bc5688a-c085-49f1-93bc-e080ed979544",
        "TokenId": "6bc5688a-c085-49f1-93bc-e080ed979544"
    }
}

但是,如果我不发送嵌套的 JSON,如下所示,它工作正常,我在有效的 BigQuery table:

中看到数据
{
    "event_id": "958dc0a7-40e0-454f-9ea0-3c231ca0c986",
    "event_name": "labelled",
    "event_time": "2022-02-22T14:19:48.514Z",
    "prescription_id": "332637da-85a9-4ffe-b856-a3b05f25d9d9",
    "event_data_decrypted": "Eeeesh!"
}

目标 table 存在并具有以下架构:

除了必须单独编写 function/program 或编辑模板的 JS UDF 之外,还有更简单的方法来解决这个问题吗? BigQuery 不允许我创建 JSON 数据类型列。我认为这可能有所帮助。这应该是简单易行的吧?

在此先感谢大家。

您的列是字符串类型,需要一个字符串。在您的情况下,它是 JSON,而不是字符串,这就是它失败的原因。

如您在 the documentation 中所见,您可以使用 UDF 自定义 PubSUb 消息处理。它并不完美,但它是解决您问题的好方法。

JSON 数据类型非常新,我认为数据流模板尚不支持它。