Почему Azure SQL Полибазовый запрос хранилища данных к Azure Data Lake Gen 2 возвращает много строк для одного источника файла, но ноль строк для источника родительской папки?
Я создал:
- Мастер-ключ (CREATE MASTER KEY;)
- Учетные данные (CREATE DATABASE SCOPED CREDENTIAL) - использует учетную запись ADLS Gen 2 клавиша
- Внешний источник данных (CREATE EXTERNAL DATA SOURCE)
- Формат файла (CREATE EXTERNAL FILE FORMAT)
- Внешняя таблица (CREATE EXTERNAL TABLE)
Все работает нормально, когда моя внешняя таблица указывает на указанный файл c, то есть
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 = '/ Time /',
- LOCATION = '/ 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, используя Azure SQL Хранилище данных и Polybase?