#azure #azure-synapse
#azure #azure-synapse
Вопрос:
SQL, который не собирает все файлы в основной папке и вложенных папках. Azure Synapse и Sql по требованию, поэтому будьте осторожны, в нем много обычного sql, который еще не работает.
SELECT *
FROM
OPENROWSET(
BULK 'https://companyland.dfs.core.windows.net/storageboxes/data/*.snappy.parquet',
FORMAT='PARQUET'
) AS [r];
В этой папке ДАННЫХ есть папки с именем MONTH_10, а затем в ней есть одна папка для каждого дня, например Day_1, которая затем содержит файлы parquet за день. В папке DATA , непосредственно под ней, также есть 5 файлов parquet . Во всех вложенных папках за этот год содержится 50 файлов parquet.
Когда я выполняю приведенный выше sql в Synapse, он возвращает только 5 файлов вместо 55 файлов, как и должно быть, включая вложенные папки. Глядя на документы Microsoft, это потому, что имена вложенных папок имеют _ или . в них.
Чтобы выделить отдельные файлы дня, мне нужно изменить запрос на это :
SELECT *
FROM
OPENROWSET(
BULK 'https://companyland.dfs.core.windows.net/storageboxes/data/*/*/*/*',
FORMAT='PARQUET'
) AS [r];
Также необычно, что я обнаружил, что Azure Snyapse не любит операторы объединения в операторе create view, поэтому мне было интересно, есть ли способ изменить мой оператор BULK, чтобы все 55 файлов были собраны?
Комментарии:
1. При использовании * в OPENROWSET path вы можете указать конечный уровень вложенных папок для чтения. Пример: хранилище ……/ контейнер / продажи / год = * / месяц = * будет считывать все папки в рамках продаж, которые начинаются с year= и все папки внутри, начинающиеся с month=, но не будет считывать ни одной вложенной папки под папками month = * .
2. Спасибо за эту информацию. В конвейере также есть рекурсивная опция для исходных текстов, поэтому будет интересно узнать, как это работает.
3. Если приведенный ниже ответ полезен для реализации требования, примите его, поскольку это может быть полезно для сообщества