Листагг Redshift DDL - PullRequest
       8

Листагг Redshift DDL

0 голосов
/ 27 февраля 2019

Я пытаюсь получить DDL для таблицы в Redshift.Я нашел это представление, где я могу легко выбрать определение для любой таблицы.Однако мне нужна эта информация в одной строке, и я знаю, что есть эта функция Listagg, но если я попытаюсь сделать это:

select listagg(ddl, ' ')
from admin.v_generate_tbl_ddl
where schemaname = 'schema'
and tablename = 'orders'

Это дает мне эту ошибку:

Не удалось выполнить запрос

Причина: ошибка SQL [XX000]: ОШИБКА: одна или несколько используемых функций должны быть применены как минимум к одной созданной пользователем таблице.Примерами функций только для пользовательских таблиц являются LISTAGG, MEDIAN, PERCENTILE_CONT и т. Д.

Не могли бы вы мне помочь, как мне этого добиться?

1 Ответ

0 голосов
/ 27 февраля 2019

listagg - это функция только для вычислительных узлов .

Но запрос, который вы запускаете для получения таблицы ddl, выполняется только для лидера, поскольку он определяет только таблицы pg_ *.

Согласно документации AWS

Запрос, который ссылается только на таблицы каталога (таблицы с префиксом PG, например PG_TABLE_DEF) или который не ссылается на какие-либо таблицы, выполняется исключительно на ведущем узле..

Если запрос, использующий функцию вычислительного узла, не ссылается на пользовательскую таблицу или системную таблицу Amazon Redshift, возвращает следующую ошибку.

[Amazon] (500310) Недопустимая операция: одна или несколько используемых функций должны быть применены как минимум к одной созданной пользователем таблице.

https://docs.aws.amazon.com/redshift/latest/dg/c_SQL_functions_compute_node_only.html

Подводя итог, поскольку ваш запрос не ссылается на таблицу, созданную пользователем , вы не можете использовать listagg

...