Допустимые столбцы разделов для внешних таблиц - PullRequest
0 голосов
/ 02 мая 2020

Я пытаюсь создать внешнюю таблицу с различными столбцами разделов.

Это работает, например, для выполнения следующих действий:

create or replace external table mytable( 
    myday date as to_date(substr(metadata$filename, 35, 10), 'YYYY-MM-DD'))   
    partition by (myday)
    location = @mys3stage
    file_format = (type = parquet);

Однако я бы хотел использовать regex_substr вместо индексации символов, поскольку у меня не всегда будут одинаковые индексы символов для всех разделение столбцов. Я хотел бы сделать это:

create or replace external table mytable( 
    myday date as to_date(regexp_substr(metadata$filename, 'day=[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]'), 'day=YYYY-MM-DD'))   
    partition by (myday)
    location = @mys3stage
    file_format = (type = parquet);

Это дает мне ошибку Defining expression for partition column MYDAY is invalid. Я могу успешно выполнить предложение regexp_substr в операторе выбора вне создания внешней таблицы, получая те же результаты, что и substr подход.

Как я могу использовать сопоставление строк регулярных выражений в своем определении столбца раздела внешней таблицы?

1 Ответ

0 голосов
/ 03 мая 2020

REGEX_SUBSTR - это не функция, которая есть в списке поддерживаемых в настоящее время функций ключа раздела. Пожалуйста, используйте следующую ссылку, чтобы увидеть список допустимых функций:

https://docs.snowflake.com/en/sql-reference/sql/create-external-table.html#partitioning -параметры

Я не совсем уверен, что понимаю, как структура вашей папки не будет быть последовательным. Возможно, если вы предоставили пример, это сообщество может предложить более краткий ответ. Однако, если вы не можете найти работающий механизм синтаксического анализа, возможно, вы могли бы использовать оператор CASE для обработки каждой уникальной структуры папок, с которой вы можете столкнуться в вашей среде.

...