Почему запрос Polybase из хранилища данных SQL Azure к Azure Data Lake Gen 2 возвращает много строк для одного источника файла, но ноль строк для источника родительской папки?
Я создал:
- Мастер-ключ (СОЗДАТЬ ГЛАВНЫЙ КЛЮЧ;)
- Учетные данные (CREATE DATABASE SCOPED CREDENTIAL) - использует ключ учетной записи ADLS Gen 2
- Внешний источник данных (СОЗДАТЬ ВНЕШНИЙ ИСТОЧНИК ДАННЫХ)
- Формат файла (СОЗДАТЬ ВНЕШНИЙ ФОРМАТ ФАЙЛА)
- Внешняя таблица (CREATE EXTERNAL TABLE)
Все работает нормально, когда моя внешняя таблица указывает на конкретный файл, т.е.
CREATE EXTERNAL TABLE [ext].[Time]
(
[TimeID] int NOT NULL,
[HourNumber] tinyint NOT NULL,
[MinuteNumber] tinyint NOT NULL,
[SecondNumber] tinyint NOT NULL,
[TimeInSecond] int NOT NULL,
[HourlyBucket] varchar(15) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL
)
WITH
(
LOCATION = '/Time/time001.txt',
DATA_SOURCE = ADLSDataSource,
FILE_FORMAT = uncompressedcsv,
REJECT_TYPE = value,
REJECT_VALUE = 2147483647
);
SELECT * FROM [ext].[Time];
Было возвращено много строк, поэтому я уверен, что все элементы, упомянутые выше, настроены правильно.
Папка Time в Azure Data Lake Gen 2 содержит множество файлов, а не только time001.txt. Когда я изменяю свою внешнюю таблицу так, чтобы она указывала на папку, а не на отдельный файл, запрос возвращает нулевые строки, т.е.
CREATE EXTERNAL TABLE [ext].[Time]
(
[TimeID] int NOT NULL,
[HourNumber] tinyint NOT NULL,
[MinuteNumber] tinyint NOT NULL,
[SecondNumber] tinyint NOT NULL,
[TimeInSecond] int NOT NULL,
[HourlyBucket] varchar(15) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL
)
WITH
(
LOCATION = '/Time/',
DATA_SOURCE = ADLSDataSource,
FILE_FORMAT = uncompressedcsv,
REJECT_TYPE = value,
REJECT_VALUE = 2147483647
);
SELECT * FROM [ext].[Time];
Возвращено ноль строк
Я пытался:
- МЕСТО = '/ Время /',
- МЕСТО = '/ Время',
- LOCATION = 'Время /',
- LOCATION = 'Время',
Но всегда ноль строк. Я также выполнил инструкции на https://docs.microsoft.com/en-us/azure/synapse-analytics/sql-data-warehouse/sql-data-warehouse-load-from-azure-data.-lake-store
Я протестировал все файлы в папке и по отдельности вернул много строк данных.
Я запросил все файлы из хранилища BLOB-объектов, а не ADLS Gen2, и запрос «Папка» вернул все строки, как ожидалось.
Как запросить все файлы в папке "как один" из хранилища Azure Data Lake Gen2 с помощью хранилища данных SQL Azure и Polybase?