Я пытаюсь настроить задание Cloud Dataflow SQL для обогащения данных, поступающих из Pub / Sub topi c, прежде чем передавать их другому topi c для преобразования и загрузки.
Рассмотрим следующее входящее сообщение:
{
"url": "https://www.example.com/",
"origin": "https://example.com",
"category": "foo",
"runId": "f34dc123-d4ea-4856-8436-c10f6db6d3ce",
"boolean0": true,
"boolean1": true,
"boolean2": false,
"vendor": null,
"timestamp": "2020-05-08 06:01:54",
"technologies": null,
"flags": []
}
Для него в потоке данных определена следующая схема SQL:
[
{
"name": "event_timestamp",
"type": "TIMESTAMP",
"description": "Pub/Sub event timestamp",
"mode": "REQUIRED"
},
{
"name": "url",
"type": "STRING",
"mode": "NULLABLE"
},
{
"name": "origin",
"type": "STRING",
"mode": "NULLABLE"
},
{
"name": "category",
"type": "STRING",
"mode": "NULLABLE"
},
{
"name": "runId",
"type": "STRING",
"mode": "NULLABLE"
},
{
"name": "boolean0",
"type": "BOOL",
"mode": "NULLABLE"
},
{
"name": "boolean1",
"type": "BOOL",
"mode": "NULLABLE"
},
{
"name": "boolean2",
"type": "BOOL",
"mode": "NULLABLE"
},
{
"name": "vendor",
"type": "STRING",
"mode": "NULLABLE"
},
{
"name": "timestamp",
"type": "STRING",
"mode": "NULLABLE"
},
{
"name": "technologies",
"type": "STRUCT",
"fields": [
{
"name": "foo",
"type": "BOOL",
"mode": "NULLABLE"
},
{
"name": "bar",
"type": "BOOL",
"mode": "NULLABLE"
},
{
"name": "skynet",
"type": "BOOL",
"mode": "NULLABLE"
},
{
"name": "glados",
"type": "BOOL",
"mode": "NULLABLE"
},
{
"name": "shodan",
"type": "BOOL",
"mode": "NULLABLE"
}
],
"mode": "NULLABLE"
},
{
"name": "flags",
"type": "STRUCT",
"mode": "REPEATED",
"fields": [
{
"name": "url",
"type": "STRING",
"mode": "NULLABLE"
},
{
"name": "flag",
"type": "STRING",
"mode": "NULLABLE"
}
]
}
]
Очевидно, я определяю boolean0
как BOOL
, потому что Dataflow предупреждает меня при определении схемы в пользовательском интерфейсе, что BOOLEAN
не поддерживается.
Мой запрос следующий:
SELECT
*
FROM
pubsub.topic.`awesome-project`.`result-stream` AS messages
LEFT OUTER JOIN
bigquery.table.`awesome-project`.dataset_name.categories -- maps human-readable categories to INTEGER types for BQ partitioning
USING
(category)
Тем не менее, когда приходит сообщение и начинается запрос запущен, он сразу же выходит из строя с сообщением SEVERE: Invalid/unsupported arguments for SQL job launch: Query uses unsupported SQL features: Field type 'BOOLEAN' is not supported (field 'boolean0')
Я не могу понять, почему это будет вызывать, так как в определении схемы incoming я использую BOOL
, а задание выводится в Pub / Sub topi c, для которого нет установленной схемы.