Поделиться через


Экспорт в таблицу

Область применения: ✅Microsoft Fabric✅Azure Data Explorer

Вы можете экспортировать данные, определив внешнюю таблицу и экспортируя в нее данные. Свойства таблицы задаются при создании внешней таблицы. Команда экспорта ссылается на внешнюю таблицу по имени.

Разрешения

Для выполнения этой команды необходимо иметь по крайней мере разрешения администратора таблицы.

Синтаксис

.export [async] totableexternalTableName
[with(propertyName=propertyValue [, ...]] )<|запрос

Дополнительные сведения о соглашениях синтаксиса.

Параметры

Имя (название) Type Обязательно Описание
externalTableName string ✔️ Имя внешней таблицы, в которую нужно экспортировать.
propertyName, propertyValue string Список необязательных свойств, разделенных запятыми.
query string ✔️ Запрос экспорта.

Поддерживаемые свойства

Следующие свойства поддерживаются как часть экспорта во внешнюю команду таблицы.

Свойство Type Описание По умолч.
sizeLimit long Ограничение размера в байтах одного артефакта хранилища, записанного перед сжатием. Полная группа строк размера parquetRowGroupSize записывается перед проверкой того, достигает ли эта группа строк ограничение размера и должна запустить новый артефакт. Допустимый диапазон: 100 МБ (по умолчанию) до 1 ГБ.
distributed bool Отключите или включите распределенный экспорт. Значение false эквивалентно указанию single распространения. По умолчанию — true.
distribution string Указание распространения (single, per_node, per_shard). Дополнительные сведения см. в параметрах распространения По умолчанию — per_node.
distributionKind string При необходимости переключается на равномерное распределение, если внешняя таблица секционируется по строковой секции. Допустимые значения — uniform или default. Дополнительные сведения см. в параметрах распространения
concurrency Число Указывает системе, сколько секций выполняется параллельно. Дополнительные сведения см. в параметрах распространения Значение по умолчанию — 16.
spread Число Указывает системе, как распределять секции между узлами. Дополнительные сведения см. в параметрах распространения Значение по умолчанию — Min(64, number-of-nodes).
parquetRowGroupSize int Относится только к формату данных Parquet. Управляет размером группы строк в экспортированных файлах. Это значение имеет приоритет над sizeLimit, что означает, что полная группа строк будет экспортирована перед проверкой того, достигает ли эта группа строк ограничение размера и должна запустить новый артефакт. По умолчанию размер группы строк составляет 100 000 записей.

Параметры распространения

Распределение экспорта во внешнюю операцию таблицы указывает количество узлов и потоков, которые записываются в хранилище одновременно. Распределение по умолчанию зависит от секционирования внешней таблицы:

Секционирование внешней таблицы Распределение по умолчанию
Внешняя таблица не секционирована или секционирована только по столбцам datetime Экспорт распространяется per_node — все узлы экспортируются одновременно. Каждый узел записывает данные, назначенные данному узлу. Количество файлов, экспортированных узлом, больше одного, только если размер данных из этого узла превышает sizeLimit.
Внешняя таблица секционирована строковым столбцом Экспортируемые данные перемещаются между узлами, таким образом, каждый узел записывает подмножество значений секции. Один раздел всегда записывается одним узлом. Число файлов, записанных на секцию, должно быть больше одного, только если данные превышаются sizeLimit. Если внешняя таблица содержит несколько строковых секций, данные секционируются между узлом на основе первой секции. Поэтому рекомендация заключается в определении секции с наиболее универсальным распределением в качестве первой.

Изменение параметров распространения по умолчанию

Изменение параметров распространения по умолчанию может оказаться полезным в следующих случаях:

Вариант использования Описание Рекомендация
Уменьшение количества экспортированных файлов Экспорт создает слишком много небольших файлов, и вы хотите создать меньшее количество больших файлов. Задайте distribution=single или distributed=false (оба эквивалента) в свойствах команды. Только один поток выполняет экспорт. Недостатком этого является то, что операция экспорта может быть медленнее, так как параллелизм значительно уменьшается.
Уменьшение длительности экспорта Увеличение параллелизма операции экспорта для уменьшения его длительности. Задайте distribution=per_shard в свойствах команды. Это означает, что параллелизм операций записи — на сегмент данных, а не на узел. Это важно только при экспорте во внешнюю таблицу, которая не секционирована по строковой секции. Это может привести к слишком большой нагрузке на хранилище, что может привести к регулированию. См. сбои хранилища.
Уменьшение длительности экспорта для внешних таблиц, секционированных по строковой секции Если секции не равномерно распределяются между узлами, экспорт может занять больше времени для выполнения. Если одна секция гораздо больше, чем другие, узел, назначенный этой секции, выполняет большую часть работы экспорта, а другие узлы остаются в основном бездействующими. Дополнительные сведения см. в параметрах распространения. Можно изменить несколько параметров:
* Если существует несколько строковых секций, определите его с лучшим распределением.

* Задайте distributionKind=uniform в свойствах команды. Этот параметр отключает параметры распространения по умолчанию для секционированных по строкам внешних таблиц. Экспорт выполняется с распределением per-node и каждый узел экспортирует данные, назначенные узлу. Одна секция может быть записана несколькими узлами, и число файлов увеличивается соответствующим образом. Чтобы увеличить параллелизм еще дальше, установите distributionKind=uniform вместе с distribution=per_shard самым высоким параллелизмом (за счет потенциально большого количества записанных файлов)

* Если причина медленного экспорта не выпадает из данных, уменьшите длительность, увеличивая параллелизм, не изменяя параметры секционирования. hint.spread Используйте свойстваhint.concurrency, определяющие параллелизм секционирования. См . оператор секции. По умолчанию число узлов, экспортируемых одновременно (spread) является минимальным значением от 64 до количества узлов. Если задать spread значение более высокого числа узлов, увеличивается параллелизм на каждом узле (максимальное значение равно spread 64).

Проверка подлинности и авторизация

Чтобы экспортировать в внешнюю таблицу, необходимо настроить разрешения на запись. Дополнительные сведения см. в разрешениях на запись для служба хранилища Azure внешней таблицы или внешней таблицы SQL Server.

Выходные данные

Выходной параметр Type Описание
ExternalTableName string Имя внешней таблицы.
Путь string Выходной путь.
NumRecords string Количество записей, экспортированных в путь.

Примечания.

  • Схема вывода запроса экспорта должна соответствовать схеме внешней таблицы, включая все столбцы, определенные секциями. Например, если таблица секционирована по DateTime, схема выходных данных запроса должна иметь столбец timestamp, соответствующий timestampColumnName. Это имя столбца определяется в определении секционирования внешней таблицы.

  • Невозможно переопределить свойства внешней таблицы с помощью команды экспорта. Например, нельзя экспортировать данные в формате Parquet во внешнюю таблицу, формат которой — CSV.

  • Если внешняя таблица секционирована, экспортированные артефакты записываются в соответствующие каталоги в соответствии с определениями секций. Пример см. в примере секционированных внешних таблиц.

    • Если значение секции равно null/пусто или является недопустимым значением каталога, для определений целевого хранилища значение секции заменяется значением __DEFAULT_PARTITION__по умолчанию.
  • Рекомендации по устранению ошибок хранения во время выполнения команд экспорта см. в статье об ошибках во время выполнения команд экспорта.

  • Внешние столбцы таблиц сопоставляются с подходящими типами данных целевого формата в соответствии с правилами сопоставления типов данных.

  • Собственный экспорт Parquet — это более производительный механизм экспорта ресурсов. Экспортируемый столбец datetime в настоящее время не поддерживается COPYSynapse SQL.

Number of files

Количество файлов, записанных на секцию, зависит от параметров распространения операции экспорта:

  • Если внешняя таблица включает только datetime секции или нет секций вообще, количество файлов, записанных для каждой секции, должно быть аналогично количеству узлов (или больше, если sizeLimit достигнут). При распределении операции экспорта все узлы экспортируются одновременно. Чтобы отключить распределение, чтобы только один узел выполняет записи, установите distributed значение false. Этот процесс создает меньше файлов, но снижает производительность экспорта.

  • Если внешняя таблица содержит секцию по строковом столбцу, количество экспортированных файлов должно быть одним файлом на секцию (или более, если sizeLimit достигнуто). Все узлы по-прежнему участвуют в экспорте (операция распределена), но каждая секция назначается конкретному узлу. Задание distributed значение false, приводит только к тому, что один узел выполняет экспорт, но поведение остается неизменным (один файл, записанный на секцию).

Примеры

Пример несекционированных внешних таблиц

В следующем примере данные из таблицы T экспортируются в таблицу ExternalBlob. ExternalBlob — это не секционированная внешняя таблица.

.export to table ExternalBlob <| T

выходных

ExternalTableName Путь NumRecords
ExternalBlob http://storage1.blob.core.windows.net/externaltable1cont1/1_58017c550b384c0db0fea61a8661333e.csv 10

Пример секционированных внешних таблиц

В следующем примере сначала создается секционированная внешняя таблица, PartitionedExternalBlob с указанным расположением хранилища BLOB-объектов. Данные хранятся в формате CSV с форматом пути, который упорядочивает данные по имени и дате клиента.

.create external table PartitionedExternalBlob (Timestamp:datetime, CustomerName:string) 
kind=blob
partition by (CustomerName:string=CustomerName, Date:datetime=startofday(Timestamp))   
pathformat = ("CustomerName=" CustomerName "/" datetime_pattern("yyyy/MM/dd", Date))   
dataformat=csv
( 
   h@'http://storageaccount.blob.core.windows.net/container1;secretKey'
)

Затем он экспортирует данные из таблицы T во внешнюю таблицу PartitionedExternalBlob.

.export to table PartitionedExternalBlob <| T

выходных

ExternalTableName Путь NumRecords
ExternalBlob http://storageaccount.blob.core.windows.net/container1/CustomerName=customer1/2019/01/01/fa36f35c-c064-414d-b8e2-e75cf157ec35_1_58017c550b384c0db0fea61a8661333e.csv 10
ExternalBlob http://storageaccount.blob.core.windows.net/container1/CustomerName=customer2/2019/01/01/fa36f35c-c064-414d-b8e2-e75cf157ec35_2_b785beec2c004d93b7cd531208424dc9.csv 10

Если команда выполняется асинхронно с помощью ключевого слова async, выходные данные доступны с помощью команды отображения сведений об операции.