Почему Dataflow настаивает на использовании типа BOOLEAN, если он не поддерживается? - PullRequest
0 голосов
/ 08 мая 2020

Я пытаюсь настроить задание 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, для которого нет установленной схемы.

...