Redshift Spectrum выдает синтаксическую ошибку при создании вложенных данных - PullRequest
1 голос
/ 20 июня 2019

Я использую этот запрос

CREATE EXTERNAL TABLE test.post(
      edge_media_to_tagged_user struct<
            "edges": array<
            "node": struct<
                "user": struct<
                  id:bigint,
                  username:text
                >,
                x: float(24),
                y: float(24)
            >
        >
      >
  )
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
LOCATION 's3://bucket/test';

Каким-то образом запрос выше дает мне

ERROR:  syntax error at or near ":"
LINE 4:             "node": struct<

Удаление или добавление двоеточия и / или двойной кавычки по-прежнему выдает ошибку.

Любая помощь приветствуется!

Ответы [ 3 ]

1 голос
/ 21 июня 2019

Я бы сказал, что это, вероятно, вызвано этим битом:

        "edges": array<
        "node": struct<

Массив не содержит именованных элементов, поэтому он, вероятно, завершается ошибкой, когда обнаруживает "node": в определении array.

1 голос
/ 21 июня 2019

Ответ от Джона дает важный совет, этот код работает


CREATE EXTERNAL TABLE likes_schema_test.post88(
      edge_media_to_tagged_user struct<
        "edges": array<struct<      <-- change here
            "node": struct<
                "user": struct<
                  full_name:text,
                  id:bigint,
                  is_verified: boolean,
                  username:text
                >,
                x: float(24),
                y: float(24)
            >>
        >
      >
  )
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
LOCATION 's3://follower-dumper-testing/post_test';

Изменение "node" на 'node' приведет к синтаксической ошибке.

0 голосов
/ 20 июня 2019

Redshift, к сожалению, не поддерживает тип данных struct.Полный список типов данных, которые поддерживает Redshift, можно найти здесь .

РЕДАКТИРОВАТЬ: Нормальный Redshift не поддерживает структуры.Redshift Spectrum делает.

...