PolyBase создает внешнюю таблицу для запроса Hadoop, несоответствие количества столбцов

Мы запустили сервис polybase для запросов к нашему кластеру hadoop. Вот файловая структура на нашей стороне hadoop:

Структура для / inventory / tablespace / managed / hive / xxxxxxx / dxxxxxx / created_month = 2019-11 / base_0000083 / bucket_00001 Версия файла: 0.12 с ORC_135 Строки: 51107 Сжатие: ZLIB Размер сжатия: 262144 id: int, xxx xxx xxx

На этой стороне 16 полей

С другой стороны, я создал следующий формат файла:

    CREATE EXTERNAL FILE FORMAT [OrcFileFormat] WITH (
    FORMAT_TYPE = ORC,
     DATA_COMPRESSION = N'org.apache.hadoop.io.compress.DefaultCodec')
   

и внешняя таблица, как показано ниже:

    CREATE EXTERNAL TABLE [dbo].[test]
    (
        id:int,
    xxx
    xxx
    xxx
    )
    WITH (DATA_SOURCE = [hadoop_test],
    LOCATION = N'//warehouse/tablespace/managed/hive/xxxxxxx/dxxxxxx/created_month=2019- 
     11/base_0000083/bucket_00001'
    ,FILE_FORMAT = [OrcFileFormat]
    ,REJECT_TYPE = VALUE,
    REJECT_VALUE = 500)
   

С точно скопированными полями и единственным изменением типов данных было преобразование строки в varchar и метки времени на datetime. Таблица создана успешно; однако при выполнении следующего запроса:

     SELECT TOP (1000) *
      FROM [dbo].test

Выдается эта ошибка:

Невозможно выполнить удаленный запрос к поставщику OLE DB MSOLEDBSQL для связанного сервера (значение null). Не удалось получить доступ к внешнему файлу из-за внутренней ошибки: «Файл // хранилище / табличное пространство / управляемый / куст / xxxxxxx / dxxxxxx / created_month = 2019-11 / base_0000083 / bucket_00001: HdfsBridge :: CreateRecordReader - Возникла непредвиденная ошибка при создании средства чтения записей: HadoopExecutionException: Несоответствие количества столбцов. Исходный файл имеет 6 столбцов, определение внешней таблицы - 16 столбцов. '

Кто-нибудь может мне помочь?


person Paniz Asghari    schedule 30.01.2021    source источник


Ответы (2)


Это происходит, когда ORC создается как таблица транзакций. В этой ситуации файлы ORC содержат некоторую другую информацию, например операции и т. Д. Если вы откроете файл ORC, он будет выглядеть в следующем формате:

(operation, originalTransaction, bucket, rowId, currentTransaction, (ActualData))

где ActualData - это ваши фактические данные, которые были сохранены в файле. Итак, как видите, у вас есть 6 столбцов против вашего фактического количества столбцов. Как Microsoft сказала об ограничениях Polybase здесь, вы не сможете читать файлы транзакций ORC.

person Sajjad    schedule 01.02.2021

Это не ответ, а шаг в устранении неполадок. Попробуйте создать внешнюю таблицу с фиктивным полем, т.е. фиктивным int, и запустите запрос. Когда он терпит неудачу из-за несоответствия столбцов, он сообщает вам, какие поля были найдены вместе с их сопоставлением. Это может помочь вам в дальнейшем устранении неполадок.

person pabechevb    schedule 31.01.2021