Azure SQL Запрос хранилища данных Polybase к Azure Озеро данных Gen 2 возвращает ноль строк - PullRequest
1 голос
/ 09 апреля 2020

Почему 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...