Azure Synapse Sql — включает вложенные папки с _ и . при извлечении

#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. Если приведенный ниже ответ полезен для реализации требования, примите его, поскольку это может быть полезно для сообщества

Ответ №1:

Ниже приведены скриншоты, показывающие тестирование, которое я провел, и используемый запрос. Я сохранил файлы с единственной записью, указывающей папку, в которой они находятся. Пример: папка Month_1 -> папка day_1 -> файл содержит month1day1 в качестве данных.

введите описание изображения здесь

Структура хранилища:

введите описание изображения здесь

введите описание изображения здесь

введите описание изображения здесь

введите описание изображения здесь