Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения:Azure Synapse Analytics
Tip
Microsoft Fabric Data Warehouse — это реляционное хранилище корпоративного масштаба на основе озера данных, с архитектурой, готовой к будущему, встроенным ИИ и новыми функциями. Если вы не знакомы с хранилищем данных, начните с Fabric Data Warehouse. Существующие рабочие нагрузки выделенных пулов SQL могут быть обновлены до Fabric для доступа к новым возможностям в области науки о данных, аналитики в реальном времени и создания отчётов.
В этой статье объясняется, как использовать инструкцию COPY в Azure Synapse Analytics для загрузки данных из внешних учетных записей хранения. Это COPY заявление обеспечивает наибольшую гибкость для высокопроизводительного ввода данных в Azure Synapse Analytics.
Note
Сведения о хранилище в Microsoft Fabric см. в разделе COPY INTO.
Использование COPY следующих возможностей:
- Используйте более низкие привилегии пользователей для загрузки данных без строгих разрешений CONTROL в хранилище данных.
- Выполните одну инструкцию T-SQL, не создавая другие объекты базы данных.
- Правильно проанализировать и загрузить CSV-файлы, где разделители (строка, поле, строка) экранируются в столбцах с разделителями строк.
- Укажите более детальную модель разрешений без предоставления ключей учетной записи хранения с помощью подписанных URL-адресов (SAS).
- Используйте другой аккаунт хранения для местоположения
ERRORFILE(REJECTED_ROW_LOCATION). - Настройте значения по умолчанию для каждого целевого столбца и укажите поля исходных данных для загрузки в определенные целевые столбцы.
- Укажите пользовательский терминатор строки, терминатор поля и полевые цитаты для CSV-файлов.
- Используйте форматы даты SQL Server для CSV-файлов.
- Укажите подстановочные знаки и несколько файлов в пути расположения хранилища.
- Автоматическое обнаружение схемы упрощает процесс определения и сопоставления исходных данных в целевые таблицы.
- Процесс автоматического создания таблиц автоматически создает таблицы и работает вместе с автоматическим обнаружением схем.
- Напрямую загружайте сложные типы данных из файлов Parquet, таких как Карты и списки, в строковые столбцы без использования других средств для предварительной обработки данных.
Note
Чтобы загрузить сложные типы данных из файлов Parquet, включите автоматическое создание таблицы с помощью AUTO_CREATE_TABLE.
Полные примеры и краткие руководства с помощью инструкции COPY см. в следующих примерах:
- Краткое руководство. Массовая загрузка данных с помощью инструкции COPY
- Краткое руководство. Примеры использования инструкции COPY и поддерживаемых методов проверки подлинности
- Краткое руководство. Создание инструкции COPY с помощью полнофункционального пользовательского интерфейса Synapse Studio
Note
Идентификатор Microsoft Entra ранее был известен как Azure Active Directory (Azure AD).
Syntax
COPY INTO [ schema. ] table_name
[ (Column_list) ]
FROM '<external_location>' [ , ...n ]
WITH
(
[ FILE_TYPE = { 'CSV' | 'PARQUET' | 'ORC' } ]
[ , FILE_FORMAT = EXTERNAL FILE FORMAT OBJECT ]
[ , CREDENTIAL = (AZURE CREDENTIAL) ]
[ , ERRORFILE = ' [ http(s)://storageaccount/container ] /errorfile_directory [ / ] ] '
[ , ERRORFILE_CREDENTIAL = (AZURE CREDENTIAL) ]
[ , MAXERRORS = max_errors ]
[ , COMPRESSION = { 'Gzip' | 'DefaultCodec' | 'Snappy' } ]
[ , FIELDQUOTE = 'string_delimiter' ]
[ , FIELDTERMINATOR = 'field_terminator' ]
[ , ROWTERMINATOR = 'row_terminator' ]
[ , FIRSTROW = first_row ]
[ , DATEFORMAT = 'date_format' ]
[ , ENCODING = { 'UTF8' | 'UTF16' } ]
[ , IDENTITY_INSERT = { 'ON' | 'OFF' } ]
[ , AUTO_CREATE_TABLE = { 'ON' | 'OFF' } ]
)
Arguments
schema_name
Необязательный вариант, если схема по умолчанию для пользователя, выполняющего операцию, является схемой указанной таблицы. Если схема не указана, а схема по умолчанию пользователя, выполняющего COPY операцию, отличается от схемы указанной таблицы, COPY операция отменяется и возвращается сообщение об ошибке.
имя_таблицы
Имя таблицы для копирования данных. Целевой таблицей может быть временная или постоянная таблица, которая уже должна существовать в базе данных. Для режима автоматического обнаружения схем не укажите список столбцов.
(column_list)
Необязательный список одного или нескольких столбцов, используемых для сопоставления полей исходных данных с целевыми столбцами таблицы для загрузки данных.
Не указывайте column_list , когда AUTO_CREATE_TABLE = 'ON'.
Список column_list должен быть заключен в круглые скобки, а его элементы должны разделяться запятыми. Список столбцов указывается в следующем формате:
[(имя_столбца [значение_по_умолчанию] [номер_поля] [,...n])]
- Column_name — имя столбца в целевой таблице.
- Default_value — значение по умолчанию, заменяющее любое значение NULL в входном файле. Значение по умолчанию применяется ко всем форматам файлов. COPY пытается загрузить ЗНАЧЕНИЕ NULL из входного файла, если столбец опущен из списка столбцов или когда есть пустое поле входного файла. Значение по умолчанию предшествует ключевому слову default
- Field_number — номер поля входного файла, сопоставленного с целевым столбцом.
- Индексирование полей начинается с 1.
Если вы не указываете список столбцов, сопоставляет столбцы на основе исходного и целевого порядка: COPY поле ввода 1 переходит к целевому столбцу 1, поле 2 переходит к столбцу 2 и т. д.
Внешние локации
Расположение, в котором размещаются файлы, содержащие данные. В настоящее время поддерживаются Azure Data Lake Storage (ADLS) 2-го поколения и Хранилище BLOB-объектов Azure:
-
Внешнее расположение для хранилища BLOB-объектов:
https://<account\>.blob.core.windows.net/<container\>/<path\> -
Внешнее расположение для ADLS 2-го поколения:
https://<account\>.dfs.core.windows.net/<container\>/<path\>
Note
Конечная .blob точка доступна для ADLS 2-го поколения и в настоящее время обеспечивает лучшую производительность. Используйте конечную точку .blob , если .dfs для метода проверки подлинности не требуется.
Account — имя учетной записи хранения.
Container — имя контейнера BLOB-объектов.
Path — путь к папке или файлу данных. Расположение начинается с контейнера. Если указать папку,
COPYизвлекает все файлы из папки и все ее вложенные папки.COPYигнорирует скрытые папки и не возвращает файлы, начинающиеся с подчеркивания (_) или точки (.), если в пути явно не указано. Так происходит даже при указании пути с подстановочным знаком.
В путь можно включить подстановочные знаки:
- при сопоставлении имени пути с подстановочными знаками учитывается регистр;
- Вы можете экранировать подстановочный знак с помощью символа обратной косой черты (
\) - расширение подстановочных знаков применяется рекурсивно. Например, все CSV-файлы
Customer1в (включая подкаталогиCustomer1) загружаются в следующем примере:Account/Container/Customer1/*.csv
Note
Для повышения производительности не следует указывать подстановочные знаки, расширяющие большее количество файлов. Если возможно, не указывайте подстановочные знаки, а задайте несколько местоположений файлов.
Можно указать несколько расположений файлов только из одной учетной записи хранения и контейнера через разделенный запятыми список, например:
-
https://<account>.blob.core.windows.net/<container\>/<path\>,https://<account\>.blob.core.windows.net/<container\>/<path\>
FILE_TYPE = { "CSV" | "PARQUET" | 'ORC' }
FILE_TYPE задает формат внешних данных.
- CSV: указывает файл значений, разделенный запятыми, соответствующий стандарту RFC 4180 .
- PARQUET: задает формат Parquet.
- ORC: задает формат оптимизированного столбца строк (ORC).
Note
Тип файла с разделителями в PolyBase заменяется форматом CSV-файла. Можно настроить разделитель запятой по умолчанию с помощью FIELDTERMINATOR параметра.
FILE_FORMAT = external_file_format_name
FILE_FORMAT применяется только к файлам Parquet и ORC. Он задает имя объекта внешнего формата файла, в котором хранятся тип файла и метод сжатия для внешних данных. Чтобы создать формат внешнего файла, используйте CREATE EXTERNAL FILE FORMAT.
CREDENTIAL (IDENTITY = ', SECRET = ')
CREDENTIAL Указывает механизм проверки подлинности для доступа к внешней учетной записи хранения. Ниже приведены методы проверки подлинности.
| CSV | Parquet | ORC | |
|---|---|---|---|
| Хранилище BLOB-объектов Azure | SAS/MSI/SERVICE PRINCIPAL/KEY/Entra | SAS/KEY | SAS/KEY |
| Azure Data Lake 2-го поколения | SAS/MSI/SERVICE PRINCIPAL/KEY/Entra | SAS (BLOB-объект 1 )/MSI (dfs 2 )/SERVICE PRINCIPAL/KEY/Entra | SAS (BLOB-объект 1 )/MSI (dfs 2 )/SERVICE PRINCIPAL/KEY/Entra |
1 для этого метода проверки подлинности требуется конечная точка blob (.blob.core.windows.net) в пути к внешнему расположению.
2 для этого метода проверки подлинности требуется конечная точка dfs (.dfs.core.windows.net) в пути к внешнему расположению.
Note
- При проверке подлинности с помощью Microsoft Entra ID или в общедоступную учетную запись хранения не нужно указывать
CREDENTIAL. - Если учетная запись хранения связана с виртуальной сетью, необходимо пройти проверку подлинности с помощью управляемого удостоверения.
Проверка подлинности на основе подписанных URL-адресов (SAS)
-
IDENTITY: константа со значениемShared Access Signature -
SECRETПодписанный URL-адрес предоставляет делегированный доступ к ресурсам в учетной записи хранения.
-
Минимальные разрешения: READ и LIST
Проверка подлинности с помощью субъектов-служб
-
IDENTITY:<ClientID>@<OAuth_2.0_Token_EndPoint> -
SECRET: ключ субъекта-службы приложения Microsoft Entra
-
Минимальные роли RBAC: участник данных BLOB-объектов хранилища, участник данных BLOB-объектов хранилища, владелец данных BLOB-объектов хранилища или средство чтения данных BLOB-объектов хранилища
Проверка подлинности с помощью ключа учетной записи хранения
-
IDENTITY: константа со значениемStorage Account Key -
SECRET: ключ учетной записи хранения
-
Проверка подлинности с помощью управляемого удостоверения (конечные точки службы виртуальной сети)
-
IDENTITY: константа со значениемManaged Identity
-
Минимальные роли RBAC: участник данных BLOB-объектов хранилища или владелец данных BLOB-объектов хранилища для зарегистрированного логического сервера Microsoft Entra в Azure. При использовании выделенного пула SQL (прежнее название — хранилище данных SQL), не связанного с рабочей областью Synapse, эта роль RBAC не требуется, но управляемое удостоверение требует разрешений контроль доступа List (ACL) для целевых объектов, чтобы разрешить доступ на чтение к исходным файлам.
Проверка подлинности с помощью пользователя Microsoft Entra
- CREDENTIAL не требуется
Минимальные роли RBAC: участник данных BLOB-объектов хранилища или владелец данных BLOB-объектов хранилища для пользователя Microsoft Entra
ERRORFILE = расположение каталога
ERRORFILE применяется только к CSV- файлу. Он указывает каталог в COPY инструкции, где записываются отклоненные строки и соответствующий файл ошибки. Можно указать полный путь из учетной записи хранения или пути относительно контейнера. Если указанный путь не существует, хранилище создает его. Дочерний каталог создается с именем _rejectedrows. Символ _ гарантирует, что каталог экранируется для другой обработки данных, если не указано явно в параметре расположения.
Note
Когда вы передаете относительный путь ERRORFILE, сделайте его относительно пути контейнера, указанного в external_location.
В этом каталоге хранилище создает папку на основе времени отправки нагрузки в формате YearMonthDay -HourMinuteSecond (например, 20180330-173205). В этой папке процесс записывает два типа файлов: файл причины (ошибка) и файл данных (строка). Каждый файл добавляет queryIDdistributionIDидентификатор GUID и идентификатор GUID файла. Так как данные и причина хранятся в отдельных файлах, эти файлы имеют соответствующие префиксы.
Если ERRORFILE указан полный путь к учетной записи хранения, COPY используется ERRORFILE_CREDENTIAL для подключения к нему. В противном случае используется указанное CREDENTIALзначение. При использовании одинаковых учетных данных для исходных данных и ERRORFILEограничений, которые применяются ERRORFILE_CREDENTIAL также.
ERRORFILE_CREDENTIAL = (IDENTITY = ', SECRET = '')
ERRORFILE_CREDENTIAL применяется только к CSV-файлам. Поддерживаемые источники данных и методы проверки подлинности:
Хранилище BLOB-объектов Azure: SAS, субъект-служба или Microsoft Entra
Azure Data Lake 2-го поколения: SAS, MSI, субъект-служба или Microsoft Entra
Проверка подлинности на основе подписанных URL-адресов (SAS)
-
IDENTITY: константа со значениемShared Access Signature -
SECRETПодписанный URL-адрес предоставляет делегированный доступ к ресурсам в учетной записи хранения.
-
Минимальные разрешения: READ, LIST, WRITE, CREATE, DELETE
Проверка подлинности с помощью субъектов-служб
-
IDENTITY:<ClientID>@<OAuth_2.0_Token_EndPoint> -
SECRET: ключ субъекта-службы приложения Microsoft Entra
-
Минимальные роли RBAC: участник данных BLOB-объектов хранилища или владелец данных BLOB-объектов хранилища
Note
Используйте конечную точку токена OAuth 2.0 V1.
Проверка подлинности с помощью управляемого удостоверения (конечные точки службы виртуальной сети)
-
IDENTITY: константа со значениемManaged Identity
-
Минимальные роли RBAC: участник данных BLOB-объектов хранилища или владелец данных BLOB-объектов хранилища для зарегистрированного База данных SQL сервера Microsoft Entra
Проверка подлинности с помощью пользователя Microsoft Entra
-
CREDENTIALне требуется
-
Минимальные роли RBAC: участник данных BLOB-объектов хранилища или владелец данных BLOB-объектов хранилища для пользователя Microsoft Entra
Использование ключа учетной записи хранения с ERRORFILE_CREDENTIAL не поддерживается.
Note
Если вы используете ту же учетную запись хранения для файла ошибок и укажите ERRORFILE путь относительно корневого каталога контейнера, вам не нужно указывать этот ERROR_CREDENTIALфайл.
MAXERRORS = max_errors
MAXERRORS указывает максимальное количество строк отклонения, разрешенных в загрузке до сбоя операции COPY. Каждая строка, которую операция COPY не может импортировать, игнорируется и считается одной ошибкой. Если значение для максимального количества ошибок не указано, значение 0по умолчанию .
MAXERRORS нельзя использовать с AUTO_CREATE_TABLE.
Если FILE_TYPE это PARQUETтак, исключения, вызванные ошибками преобразования типов данных (например, двоичным файлом Parquet в целое число SQL), по-прежнему вызывают COPY INTO сбой, игнорируя MAXERRORS.
COMPRESSION = { 'DefaultCodec' | 'Snappy' | "GZIP" | 'NONE'}
COMPRESSION является необязательным и задает метод сжатия данных для внешних данных.
- CSV поддерживает GZIP.
- Parquet поддерживает GZIP и Snappy.
- ORC поддерживает DefaultCodec и Snappy.
- Zlib — это сжатие по умолчанию для ORC.
Команда COPY автоматически определяет тип сжатия на основе расширения файла, если этот параметр не указан:
-
.gz- GZIP -
.snappy- Живой -
.deflate- DefaultCodec (только Parquet и ORC)
Команда COPY требует, чтобы файлы gzip не содержали конечный мусор для нормальной работы. Формат gzip строго требует, чтобы файлы были состоят из допустимых членов без дополнительных сведений до, между ними или после них. Любое отклонение от этого формата, например наличие конечных данных, отличных от gzip, приводит к сбою команды COPY. Чтобы убедиться, что copy выполняется успешно, убедитесь, что в конце gzip-файлов нет конечного мусора.
FIELDQUOTE = "field_quote"
FIELDQUOTE применяется к CSV-файлу и задает один символ, используемый в качестве символа кавычки (разделителя строк) в CSV-файле. Если это значение не указано, символ кавычки (") используется в качестве символа кавычки, как определено в стандарте RFC 4180. Шестнадцатеричная нотация также поддерживается FIELDQUOTE. Расширенные символы ASCII и многобайтовые символы не поддерживаются для UTF-8 FIELDQUOTE.
Note
Символы FIELDQUOTE экранируются в строковых столбцах, где присутствует двойное поле FIELDQUOTE (разделитель).
FIELDTERMINATOR = "field_terminator"
FIELDTERMINATOR применяется только к CSV- файлу. Указывает конечный элемент поля, используемый в CSV-файле. Можно указать терминатор поля с помощью шестнадцатеричной нотации. Терминатор поля может быть многофакторным. Терминатор полей по умолчанию — это (,). Расширенные символы ASCII и многобайтовые символы не поддерживаются для UTF-8 FIELDTERMINATOR.
ROWTERMINATOR = "row_terminator"
ROWTERMINATOR применяется только к CSV- файлу. Указывает терминатор строки, используемый в CSV-файле. Можно указать терминатор строки с помощью шестнадцатеричной нотации. Терминатор строки может быть многофакторным. По умолчанию терминатор строки имеет значение \r\n.
Команда COPY префиксирует \r символ при указании \n (newline) в результате \r\n. Чтобы указать только \n символ, используйте шестнадцатеричную нотацию (0x0A). При указании терминаторов строк с несколькими диаграммами в шестнадцатеричном режиме не указывайте 0x между каждым символом.
Расширенные символы ASCII и многобайтовые символы не поддерживаются для UTF-8 ROWTERMINATOR.
FIRSTROW = First_row_int
FIRSTROW применяется к CSV-файлу и указывает номер строки, который сначала считывается во всех файлах команды COPY. Значения начинаются с 1, что является значением по умолчанию. Если задано значение 2, первая строка в каждом файле (строка заголовка) пропускается при загрузке данных. Строки пропускаются по признакам конца строк.
DATEFORMAT = { 'mdy' | 'dmy' | 'ymd' | 'ydm' | Myd | 'dym' }
DATEFORMAT применяется только к CSV-файлам и задает формат даты для сопоставления с форматами дат SQL Server. Обзор всех типов данных и функций даты и времени в языке Transact-SQL см. в статье Типы данных и функции даты и времени (Transact-SQL). Параметр DATEFORMAT в команде COPY имеет более высокий приоритет, чем параметр DATEFORMAT, настроенный на уровне сеанса.
КОДИРОВКА = UTF8 | UTF16
ENCODING применяется только к CSV- файлу. По умолчанию используется UTF8. Задает стандарт кодирования данных для файлов, загруженных командой COPY.
IDENTITY_INSERT = ON | 'OFF'
IDENTITY_INSERT указывает, следует ли использовать значение удостоверения или значения в импортированном файле данных для столбца удостоверений. Если IDENTITY_INSERT задано OFF значение (по умолчанию), значения удостоверений для этого столбца проверяются, но не импортируются. Обратите внимание на следующее поведение команды COPY.
- Если
IDENTITY_INSERTимеет значение OFF, а таблица содержит столбец удостоверений- Необходимо указать список столбцов, который не сопоставляет поле ввода с столбцом удостоверений.
- Если
IDENTITY_INSERTимеет значение ON, а таблица содержит столбец удостоверений- Если вы передаете список столбцов, он должен сопоставить поле ввода с столбцом удостоверений.
- Значение по умолчанию не поддерживается для столбца IDENTITY в списке столбцов.
- Можно задать
IDENTITY_INSERTтолько одну таблицу одновременно.
Azure Synapse Analytics автоматически назначает уникальные значения на основе начальных и добавочных значений, указанных во время создания таблицы.
AUTO_CREATE_TABLE = { ON | 'OFF' }
AUTO_CREATE_TABLE указывает, можно ли автоматически создать таблицу, работая вместе с автоматическим обнаружением схемы. AUTO_CREATE_TABLE доступен только для файлов Parquet в Azure Synapse Analytics.
- ON — включает автоматическое создание таблиц. Процесс
COPY INTOавтоматически создает новую таблицу, обнаружив структуру загружаемого файла. Вы также можете использовать его с предварительно созданными таблицами, чтобы воспользоваться преимуществами автоматического обнаружения схем файлов Parquet. - OFF: автоматическое создание таблицы не включено. Default.
Note
Автоматическое создание таблицы работает вместе с автоматическим обнаружением схемы. Автоматическое создание таблицы по умолчанию не включено.
Permissions
Пользователь, выполняя команду COPY, должен иметь следующие разрешения:
Требует разрешений INSERT и ADMINISTER BULK OPERATIONS. В Azure Synapse Analytics, INSERT и MANAGEMENT DATABASE BULK OPERATIONS требуются разрешения.
Кроме того, если пользователь, выполняющий команду COPY, также намерен создать новую таблицу и загрузить в нее данные, им требуются разрешения CREATE TABLE и ALTER ON SCHEMA.
Например, чтобы разрешить mike@contoso.com использовать COPY для создания новой таблицы в HR схеме и вставки данных из файла Parquet, используйте следующий пример Transact-SQL:
GRANT ADMINISTER DATABASE BULK OPERATIONS to [mike@contoso.com];
GRANT INSERT to [mike@contoso.com];
GRANT CREATE TABLE to [mike@contoso.com];
GRANT ALTER on SCHEMA::HR to [mike@contoso.com];
Remarks
Оператор COPY принимает только допустимые символы UTF-8 и UTF-16 для строковых данных и параметров команд. Инструкция COPY может неправильно интерпретировать исходные файлы или параметры (например ROWTERMINATOR , или FIELDTERMINATOR), которые используют недопустимые символы и вызывают непредвиденные результаты, такие как повреждение данных или другие сбои. Убедитесь, что ваши исходные файлы и параметры соответствуют UTF-8 или UTF-16, прежде чем запускать COPY оператор.
Указание MAXDOP запроса не поддерживается.COPY INTO
Чтобы обеспечить надежное выполнение, не изменяйте исходные файлы и папки во время COPY INTO операции.
- Изменение, удаление или замена всех ссылочных файлов или папок во время выполнения команды может привести к сбою операции или привести к несогласованности приема данных.
- Перед выполнением
COPY INTOубедитесь, что все исходные данные стабильны и не будут изменены во время процесса.
Если исходные данные имеют большую точность, чем определение целевого столбца, значение усечено, а не округляется для числовых, дат и типов времени.
Examples
A. Загрузка из общедоступной учетной записи хранения
В следующем примере показана самая простая форма COPY команды, которая загружает данные из общедоступной учетной записи хранения. В этом примере COPY по умолчанию инструкция соответствует формату CSV-файла элемента строки.
COPY INTO dbo.[lineitem]
FROM 'https://unsecureaccount.blob.core.windows.net/customerdatasets/folder1/lineitem.csv'
WITH (FIELDTERMINATOR = '|')
В команде COPY используются следующие значения по умолчанию:
DATEFORMAT= SESSION DATEFORMATMAXERRORS= 0COMPRESSIONпо умолчанию не сжатFIELDQUOTE= '"'FIELDTERMINATOR= ','ROWTERMINATOR= '\n'
Important
COPY Воспринимается \n так \r\n же, как внутри. Дополнительные сведения см. в ROWTERMINATOR разделе.
FIRSTROW= 1ENCODING= UTF8FILE_TYPE= CSVIDENTITY_INSERT= OFF
B. Загрузка с проверкой подлинности с помощью подписи общего доступа (SAS)
В следующем примере загружаются файлы, использующие веб-канал строки в качестве конца строки, например выходные данные UNIX. В этом примере также используется ключ SAS для проверки подлинности в Хранилище BLOB-объектов Azure.
COPY INTO test_1
FROM 'https://myaccount.blob.core.windows.net/myblobcontainer/folder1/'
WITH (
FILE_TYPE = 'CSV',
CREDENTIAL=(IDENTITY= 'Shared Access Signature', SECRET='<Your_SAS_Token>'),
--CREDENTIAL should look something like this:
--CREDENTIAL=(IDENTITY= 'Shared Access Signature', SECRET='?sv=2018-03-28&ss=bfqt&srt=sco&sp=rl&st=2016-10-17T20%3A14%3A55Z&se=2021-10-18T20%3A19%3A00Z&sig=IEoOdmeYnE9%2FKiJDSHFSYsz4AkNa%2F%2BTx61FuQ%2FfKHefqoBE%3D'),
FIELDQUOTE = '"',
FIELDTERMINATOR=';',
ROWTERMINATOR='0X0A',
ENCODING = 'UTF8',
DATEFORMAT = 'ymd',
MAXERRORS = 10,
ERRORFILE = '/errorsfolder',--path starting from the storage container
IDENTITY_INSERT = 'ON'
)
C. Загрузка списка столбцов со значениями по умолчанию с проверкой подлинности с помощью ключа учетной записи хранения
В этом примере производится загрузка файлов с указанием списка столбцов со значениями по умолчанию.
--Note when specifying the column list, input field numbers start from 1
COPY INTO test_1 (Col_one default 'myStringDefault' 1, Col_two default 1 3)
FROM 'https://myaccount.blob.core.windows.net/myblobcontainer/folder1/'
WITH (
FILE_TYPE = 'CSV',
CREDENTIAL=(IDENTITY= 'Storage Account Key', SECRET='<Your_Account_Key>'),
FIELDQUOTE = '"',
FIELDTERMINATOR=',',
ROWTERMINATOR='0x0A',
ENCODING = 'UTF8',
FIRSTROW = 2
)
D. Загрузка Parquet или ORC с помощью существующего объекта формата файла
В этом примере для загрузки всех файлов Parquet в папку используется подстановочный знак.
COPY INTO test_parquet
FROM 'https://myaccount.blob.core.windows.net/myblobcontainer/folder1/*.parquet'
WITH (
FILE_FORMAT = myFileFormat,
CREDENTIAL=(IDENTITY= 'Shared Access Signature', SECRET='<Your_SAS_Token>')
)
E. Загрузка с указанием подстановочных знаков и нескольких файлов
COPY INTO t1
FROM
'https://myaccount.blob.core.windows.net/myblobcontainer/folder0/*.txt',
'https://myaccount.blob.core.windows.net/myblobcontainer/folder1'
WITH (
FILE_TYPE = 'CSV',
CREDENTIAL=(IDENTITY= '<client_id>@<OAuth_2.0_Token_EndPoint>',SECRET='<key>'),
FIELDTERMINATOR = '|'
)
F. Загрузка с использованием учетных данных MSI
COPY INTO dbo.myCOPYDemoTable
FROM 'https://myaccount.blob.core.windows.net/myblobcontainer/folder0/*.txt'
WITH (
FILE_TYPE = 'CSV',
CREDENTIAL = (IDENTITY = 'Managed Identity'),
FIELDQUOTE = '"',
FIELDTERMINATOR=','
)
G. Загрузка с помощью автоматического обнаружения схемы
COPY INTO [myCOPYDemoTable]
FROM 'https://myaccount.blob.core.windows.net/customerdatasets/folder1/lineitem.parquet'
WITH (
FILE_TYPE = 'Parquet',
CREDENTIAL = ( IDENTITY = 'Shared Access Signature', SECRET='<key>'),
AUTO_CREATE_TABLE = 'ON'
)
FAQ
Как производительность команды COPY сравнивает с PolyBase?
Производительность команды COPY может быть лучшей в зависимости от рабочей нагрузки.
Хранилище не может автоматически разделить сжатые файлы. Для повышения производительности загрузки рекомендуется разделить входные данные на несколько файлов при загрузке сжатых CSV.
Хранилище может автоматически разделить большие несжатые CSV-файлы для параллельной загрузки, поэтому обычно не нужно вручную разделить несжатые CSV-файлы. В некоторых случаях, когда автоматическое разделение файлов невозможно из-за характеристик данных, разделение больших CSV вручную может по-прежнему повысить производительность.
Что такое руководство по разделиванию файлов для команды COPY, загружающей сжатые CSV-файлы?
В следующей таблице описывается количество используемых файлов. Когда вы достигнете рекомендуемого количества файлов, вы получите более высокую производительность с большими файлами. Количество файлов определяется числом вычислительных узлов, умноженных на 60. Например, при 6000 DWU у вас есть 12 вычислительных узлов, поэтому у вас есть 12 * 60 = 720 секций. Сведения о простом использовании разделения файлов см. в статье "Как максимально увеличить пропускную способность загрузки COPY с разделением файлов".
| DWU | Количество файлов |
|---|---|
| 100 | 60 |
| 200 | 60 |
| 300 | 60 |
| 400 | 60 |
| 500 | 60 |
| 1,000 | 120 |
| 1,500 | 180 |
| 2,000 | 240 |
| 2,500 | 300 |
| 3,000 | 360 |
| 5,000 | 600 |
| 6,000 | 720 |
| 7,500 | 900 |
| 10,000 | 1200 |
| 15,000 | 1800 |
| 30,000 | 3600 |
Каковы рекомендации по разделению файлов при использовании команды COPY для загрузки файлов Parquet или ORC?
Не нужно разделять файлы Parquet и ORC, так как команда COPY автоматически разбивает файлы. Для повышения производительности файлы Parquet и ORC в учетной записи хранения Azure должны составлять 256 МБ или больше.
Есть ли ограничения на число или размер файлов?
Нет ограничений на количество или размер файлов. Однако для повышения производительности используйте не менее 4 МБ файлов. Кроме того, ограничение количества исходных файлов не более 5000 файлов для повышения производительности.
Существуют ли известные проблемы с инструкцией COPY?
Если у вас есть рабочая область Azure Synapse, созданная до 7 декабря 2020 г., при проверке подлинности с помощью управляемого удостоверения может возникнуть аналогичное сообщение об ошибке: com.microsoft.sqlserver.jdbc.SQLServerException: Managed Service Identity isn't enabled on this server. Please enable Managed Service Identity and try again.
Чтобы обойти эту проблему, повторно зарегистрируйте управляемое удостоверение рабочей области:
- Установите Azure PowerShell. См. раздел "Установка PowerShell".
- Зарегистрируйте управляемое удостоверение рабочей области с помощью PowerShell:
Connect-AzAccount Select-AzSubscription -SubscriptionId <subscriptionId> Set-AzSqlServer -ResourceGroupName your-database-server-resourceGroup -ServerName your-SQL-servername -AssignIdentity
Связанный контент
Область применения:хранилище в Microsoft Fabric
В этой статье объясняется, как использовать инструкцию COPY в хранилище в Microsoft Fabric для загрузки из внешних учетных записей хранения. Оператор COPY обеспечивает большую гибкость приема данных с высокой пропускной способностью в хранилище в Microsoft Fabric и является стратегией Прием данных в хранилище в Microsoft Fabric.
В Fabric Data Warehouse оператор COPY в настоящее время поддерживает форматы CSV, JSONL и PARQUET. Для источников данных поддерживаются Azure Data Lake Storage 2-го поколения учетные записи и источники OneLake.
Дополнительные сведения об использовании COPY INTO в хранилище в Microsoft Fabric см. в разделе "Прием данных" в хранилище в Microsoft Fabric с помощью инструкции COPY.
По умолчанию COPY INTO выполняет проверку подлинности в качестве пользователя Microsoft Entra ID.
Использование COPY следующих возможностей:
- Используйте более низкие привилегии пользователей для загрузки данных без необходимости строгих разрешений CONTROL в хранилище.
- Выполните одну инструкцию T-SQL, не создавая другие объекты базы данных.
- Правильно проанализировать и загрузить CSV-файлы, где разделители (строка, поле, строка) экранируются в столбцах с разделителями строк.
- Правильное анализ и загрузка JSONL-файлов, где каждая строка является допустимым объектом JSON и полями сопоставляются с помощью выражений пути JSON.
- Укажите более детальную модель разрешений без предоставления ключей учетной записи хранения с помощью подписанных URL-адресов (SAS).
- Используйте другой аккаунт хранения для местоположения
ERRORFILE(REJECTED_ROW_LOCATION). - Настройте значения по умолчанию для каждого целевого столбца и укажите поля исходных данных для загрузки в определенные целевые столбцы.
- Укажите пользовательский терминатор строки, терминатор поля и полевые цитаты для CSV-файлов.
- Укажите подстановочные знаки и несколько файлов в пути расположения хранилища.
- Дополнительные сведения о вариантах приема данных и рекомендациях см. в разделе " Прием данных в хранилище в Microsoft Fabric" с помощью инструкции COPY.
Syntax
COPY INTO [ warehouse_name. ] [ schema_name. ] table_name
[ (Column_list) ]
FROM '<external_location>' [ , ...n ]
WITH
(
[ FILE_TYPE = { 'CSV' | 'JSONL' | 'PARQUET' } ]
[ , CREDENTIAL = (AZURE CREDENTIAL) ]
[ , ERRORFILE = ' [ http(s)://storageaccount/container ] /errorfile_directory [ / ] ] '
[ , ERRORFILE_CREDENTIAL = (AZURE CREDENTIAL) ]
[ , MAXERRORS = max_errors ]
[ , COMPRESSION = { 'Gzip' | 'Snappy' } ]
[ , FIELDQUOTE = 'string_delimiter' ]
[ , FIELDTERMINATOR = 'field_terminator' ]
[ , ROWTERMINATOR = 'row_terminator' ]
[ , FIRSTROW = first_row ]
[ , DATEFORMAT = 'date_format' ]
[ , ENCODING = { 'UTF8' | 'UTF16' } ]
[ , PARSER_VERSION = { '1.0' | '2.0' } ]
[ , MATCH_COLUMN_COUNT = { 'ON' | 'OFF' } ]
)
Arguments
warehouse_name
Необязательно, если текущее хранилище для пользователя, выполняющего операцию, является хранилищем указанной таблицы. Если вы не указываете хранилище, а указанная схема и таблица не существуют в текущем хранилище, COPY завершается ошибкой и возвращается сообщение об ошибке.
schema_name
Необязательный вариант, если схема по умолчанию для пользователя, выполняющего операцию, является схемой указанной таблицы. Если схема не указана, а схема по умолчанию пользователя, выполняющего COPY операцию, отличается от схемы указанной таблицы, COPY отменяется и возвращается сообщение об ошибке.
имя_таблицы
Название таблицы для COPY ввода данных. Целевая таблица уже должна существовать в хранилище.
(column_list)
Необязательный список столбцов, используемых для сопоставления полей исходных данных с целевыми столбцами таблицы во время загрузки данных.
Список column_list должен быть заключен в круглые скобки, а его элементы должны разделяться запятыми. Синтаксис:
[(Column_name [Default_value по умолчанию] [Field_number | JSON_path] [,... n])]
- Column_name — имя столбца в целевой таблице.
-
Default_value — значение по умолчанию, которое заменяет любое
NULLзначение в входном файле. Значение по умолчанию применяется ко всем форматам файлов.COPYПытается загрузитьNULLиз входного файла, когда столбец опущен в списке столбцов или при пустом поле входного файла. Перед значением по умолчанию указывается ключевое слово "default". - Field_number — применяется только к CSV-файлам. Указывает порядковое положение поля в входных данных. Индексирование полей начинается с 1.
-
JSON_path — применяется только к файлам JSONL. Указывает выражение пути JSON, определяющее поле для извлечения из каждого объекта JSON (например,
$.CustomerName).
Если вы не указываете column_list, сопоставляет столбцы на основе исходного и целевого порядка: COPY поле ввода 1 переходит в целевой столбец 1, поле 2 переходит к столбцу 2 и т. д.
Note
При работе с файлами Parquet в хранилище в Microsoft Fabric имена столбцов должны совпадать точно в исходном и целевом расположении. Если имя столбца в целевой таблице отличается от имени столбца в файле parquet, целевой столбец таблицы заполняется значением NULL.
Если вы не указываете список столбцов, сопоставляет столбцы на основе исходного и целевого порядка: COPY поле ввода 1 переходит к целевому столбцу 1, поле 2 переходит к столбцу 2 и т. д.
Внешнее расположение
Указывает, где размещаются файлы, содержащие данные. В настоящее время azure Data Lake Storage (ADLS) 2-го поколения, хранилище BLOB-объектов Azure и OneLake поддерживаются:
-
Внешнее расположение для хранилища BLOB-объектов:
https://<account\>.blob.core.windows.net/<container\>/<path\> -
Внешнее расположение для ADLS 2-го поколения:
https://<account\>.dfs.core.windows.net/<container\>/<path\> -
Внешнее расположение для OneLake:
https://onelake.dfs.fabric.microsoft.com/<workspaceId>/<lakehouseId>/Files/
Azure Data Lake Storage (ADLS) 2-го поколения обеспечивает более высокую производительность, чем Хранилище BLOB-объектов Azure (устаревшая версия). По возможности рекомендуется использовать учетную запись ADLS 2-го поколения.
Note
Конечная .blob точка доступна для ADLS 2-го поколения и в настоящее время обеспечивает лучшую производительность. Используйте конечную точку blob , если dfs для метода проверки подлинности не требуется.
Account — имя учетной записи хранения.
Container — имя контейнера BLOB-объектов.
Path — путь к папке или файлу данных. Расположение начинается с контейнера. Если указать папку,
COPYизвлекает все файлы из папки и все ее вложенные папки.COPYигнорирует скрытые папки и не возвращает файлы, начинающиеся с подчеркивания (_) или точки (.), если в пути явно не указано. Так происходит даже при указании пути с подстановочным знаком.
Подстановочные знаки можно включить в путь, где
- при сопоставлении имени пути с подстановочными знаками учитывается регистр;
- Вы можете экранировать подстановочный знак с помощью символа обратной косой черты (
\)
Note
Для повышения производительности не следует указывать подстановочные знаки, расширяющие большее количество файлов. Если возможно, не указывайте подстановочные знаки, а задайте несколько местоположений файлов.
Можно указать несколько расположений файлов только из одной учетной записи хранения и контейнера через разделенный запятыми список, например:
https://<account>.blob.core.windows.net/<container>/<path>, https://<account>.blob.core.windows.net/<container>/<path>
Внешние расположения за брандмауэром
Чтобы получить доступ к файлам в azure Data Lake Storage (ADLS) 2-го поколения и расположениях хранилища BLOB-объектов Azure, которые находятся за брандмауэром, применяются следующие предварительные требования:
- Необходимо подготовить удостоверение рабочей области для рабочей области, в котором размещено ваше хранилище. Дополнительные сведения о настройке удостоверения рабочей области см. в разделе "Удостоверение рабочей области".
- Учетная запись идентификатора записи должна иметь возможность использовать удостоверение рабочей области.
- Учетная запись идентификатора записи должна иметь доступ к базовым файлам с помощью управления доступом на основе ролей Azure (RBAC) или ACL озера данных.
- Рабочая область Fabric, на котором размещено хранилище, должна быть добавлена в качестве правила экземпляра ресурса. Дополнительные сведения о добавлении рабочей области Fabric с правилом экземпляра ресурса см. в разделе "Правило экземпляра ресурса".
FILE_TYPE = { "CSV" | JSONL | 'PARQUET' }
FILE_TYPE задает формат внешних данных.
- CSV: указывает файл значений, разделенный запятыми, соответствующий стандарту RFC 4180 .
- JSONL: задает файл JSON с разделителями новой строки (СТРОКИ JSON), где каждая строка является допустимым объектом JSON.
- PARQUET: задает формат Parquet.
CREDENTIAL (IDENTITY = ', SECRET = ')
CREDENTIAL Указывает механизм проверки подлинности для доступа к внешней учетной записи хранения.
В хранилище данных Fabric:
-
COPY INTOне поддерживается, когда общедоступный доступ отключен. - Для общедоступных учетных записей хранения поддерживаемыми механизмами проверки подлинности являются идентификатор Microsoft Entra, подписанный URL-адрес (SAS) или ключ учетной записи хранения (SAK).
- Для общедоступных учетных записей хранения за брандмауэром единственным поддерживаемым методом проверки подлинности является проверка подлинности Microsoft Entra ID.
COPY INTOиспользование OneLake в качестве источника поддерживает только аутентификацию EntraID.
По умолчанию используется Microsoft Entra ID аутентификация пользователя. Учетные данные не нужно указывать.
- Проверка подлинности с помощью подписанного URL-адреса (SAS)
-
IDENTITY: константа со значениемShared Access Signature. -
SECRETПодписанный URL-адрес предоставляет делегированный доступ к ресурсам в учетной записи хранения. - Минимальные необходимые разрешения: READ и LIST.
-
- Проверка подлинности с помощью ключа учетной записи хранения
-
IDENTITY: константа со значениемStorage Account Key. -
SECRETКлюч учетной записи хранения.
-
ERRORFILE = расположение каталога
ERRORFILE применяется к CSV и JSONL. Указывает каталог, в котором должны быть записаны отклоненные строки и соответствующий файл ошибки. Можно указать полный путь из учетной записи хранения или пути относительно контейнера. Если указанный путь не существует, система создает ее от вашего имени. Дочерний каталог создается с именем _rejectedrows. Символ _ гарантирует, что каталог экранируется для другой обработки данных, если не указано явно в параметре расположения.
Note
Когда вы передаете относительный путь ERRORFILE, сделайте его относительно пути контейнера, указанного в external_location.
В этом каталоге хранилище создает папку на основе времени отправки нагрузки в формате YearMonthDay -HourMinuteSecond (например, 20180330-173205). В этой папке хранилище создает папку с идентификатором инструкции и под этой папкой записывается два типа файлов: ошибка. Json-файл, содержащий причины отклонения, и файл row.csv, содержащий отклоненные строки.
Если ERRORFILE указан полный путь к учетной записи хранения, ERRORFILE_CREDENTIAL он используется для подключения к хранилищу. В противном случае используется значение, указанное для CREDENTIAL . Если те же учетные данные, которые используются для исходных данных, используются для ERRORFILEограничений, которые также применяются ERRORFILE_CREDENTIAL .
При использовании защищенной учетной записи хранения Azure брандмауэра файл ошибок создается в том же контейнере, указанном в пути учетной записи хранения. При использовании ERRORFILE параметра в этом сценарии также требуется указать MAXERROR параметр. Если ERRORFILE указан полный путь к учетной записи хранения, ERRORFILE_CREDENTIAL он используется для подключения к хранилищу. В противном случае используется значение, указанное для CREDENTIAL .
ERRORFILE_CREDENTIAL = (IDENTITY = ', SECRET = '')
ERRORFILE_CREDENTIAL применяется к CSV-файлам и JSONL. В хранилище в Microsoft Fabric единственным поддерживаемым механизмом проверки подлинности является подписанный URL-адрес (SAS).
- Проверка подлинности с помощью подписанных URL-адресов (SAS)
-
IDENTITY: константа со значениемShared Access Signature -
SECRETПодписанный URL-адрес предоставляет делегированный доступ к ресурсам в учетной записи хранения.
-
- Минимальные разрешения: READ, LIST, WRITE, CREATE, DELETE
Note
Если вы используете ту же учетную запись хранения для файла ошибок и укажите ERRORFILE путь относительно корневого каталога контейнера, вам не нужно указывать этот ERROR_CREDENTIALфайл.
MAXERRORS = max_errors
MAXERRORS применяется к CSV и JSONL. Указывает максимальное количество строк отклонения, разрешенных в загрузке до COPY сбоя операции. Каждая строка, которую COPY операция не может импортировать, игнорируется и считается одной ошибкой. Если не указать максимальное количество ошибок, значение по умолчанию равно 0.
В Fabric Data Warehouse нельзя использовать MAXERRORS, если FILE_TYPEPARQUET.
COMPRESSION = { 'Snappy' | "GZIP" | 'NONE'}
COMPRESSION является необязательным и задает метод сжатия данных для внешних данных.
- CSV поддерживает GZIP.
- Parquet поддерживает GZIP и Snappy.
- Не поддерживается для JSONL
COPY Команда автоматически определяет тип сжатия на основе расширения файла, если этот параметр не указан:
-
.gz- GZIP
Загрузка сжатых файлов в настоящее время поддерживается только в синтаксическом анализаторе версии 1.0.
Для COPY выполнения команды требуется, чтобы файлы gzip не содержали конечный мусор для нормальной работы. Формат gzip строго требует, чтобы файлы были состоят из допустимых членов без дополнительных сведений до, между ними или после них. Любое отклонение от этого формата, например наличие конечных данных, отличных от gzip, приводит к сбою COPY команды. Чтобы обеспечить COPY успешное выполнение, убедитесь, что в конце gzip-файлов нет конечного мусора.
FIELDQUOTE = "field_quote"
FIELDQUOTE применяется только к CSV- файлу. Указывает один символ, используемый в качестве символа кавычки (разделителя строк) в CSV-файле. Если не указать FIELDQUOTE, символ кавычки (") используется в качестве символа кавычки, как определено в стандарте RFC 4180. Шестнадцатеричная нотация также поддерживается FIELDQUOTE. Расширенные символы ASCII и многобайтовые символы не поддерживаются для UTF-8 FIELDQUOTE.
Note
Символы FIELDQUOTE экранируются в строковых столбцах, где присутствует двойное поле FIELDQUOTE (разделитель).
FIELDTERMINATOR = "field_terminator"
FIELDTERMINATOR применяется только к CSV- файлу. Указывает конечный элемент поля, используемый в CSV-файле. Кроме того, можно указать терминатор поля с помощью шестнадцатеричной нотации. Терминатор поля может быть многофакторным. Признак конца поля по умолчанию — (,). Расширенные символы ASCII и многобайтовые символы не поддерживаются в UTF-8 для FIELDTERMINATOR.
ROWTERMINATOR = "row_terminator"
ROWTERMINATOR применяется только к CSV- файлу. Указывает терминатор строки, используемый в CSV-файле. Можно указать терминатор строки с помощью шестнадцатеричной нотации. Терминатор строки может быть многофакторным. Терминаторы по умолчанию: \r\n, \nи \r.
Команда COPY префиксирует \r символ при указании \n (newline), что приводит к \r\n. Чтобы указать только \n символ, используйте шестнадцатеричную нотацию (0x0A). При указании терминаторов строк с несколькими диаграммами в шестнадцатеричном режиме не указывайте 0x между каждым символом.
Расширенные символы ASCII и многобайтовые символы не поддерживаются для UTF-8 ROWTERMINATOR.
FIRSTROW = First_row_int
FIRSTROW применяется только к CSV- файлу. Указывает номер строки, который читается первым во всех файлах COPY команды. Значения начинаются с 1, что является значением по умолчанию. Если задано значение 2, первая строка в каждом файле (строка заголовка) пропускается при загрузке данных. Строки пропускаются по признакам конца строк.
DATEFORMAT = { 'mdy' | 'dmy' | 'ymd' | 'ydm' | Myd | 'dym' }
DATEFORMAT применяется к CSV и JSONL. Задает формат даты сопоставления дат с форматами даты SQL Server. Обзор всех типов данных и функций даты и времени в языке Transact-SQL см. в статье Типы данных и функции даты и времени (Transact-SQL). DATEFORMAT внутри COPY команды имеет приоритет над DATEFORMAT, настроенным на уровне сессии.
КОДИРОВКА = UTF8 | UTF16
ENCODING применяется к CSV и JSONL. По умолчанию используется UTF8. Задаёт стандарт кодирования данных для файлов, загружаемых COPY командой.
PARSER_VERSION = { '1.0' | '2.0' }
PARSER_VERSION применяется только к CSV-файлам. Значение по умолчанию — 2.0.
PARSER_VERSION указывает средство синтаксического анализа файлов, используемое для приема, если исходный тип файла — CSV. Средство синтаксического анализа 2.0 обеспечивает улучшенную производительность приема CSV-файлов.
Средство синтаксического анализа версии 2.0 имеет следующие ограничения:
- Сжатые CSV-файлы не поддерживаются.
- Файлы с кодировкой UTF-16 не поддерживаются.
- Multicharacter или multibyte
ROWTERMINATOR,FIELDTERMINATORилиFIELDQUOTEне поддерживается. Однако\r\nпринимается как стандартROWTERMINATOR.
При использовании синтаксического анализатора версии 1.0 с файлами UTF-8 многобайтовые и многофакторные терминаторы не поддерживаются FIELDTERMINATOR.
Средство синтаксического анализа версии 1.0 доступно только для обратной совместимости. Используйте его только при возникновении этих ограничений.
Note
При использовании COPY INTO с сжатыми CSV-файлами или файлами с кодировкой COPY INTO UTF-16 автоматически переключается на PARSER_VERSION 1.0 без необходимых действий пользователя. Для многофакторных терминаторов FIELDTERMINATOR или ROWTERMINATORоператор завершается ошибкой COPY INTO . Используйте PARSER_VERSION = '1.0' , если вам нужны разделители с несколькими схемами.
MATCH_COLUMN_COUNT = { ON | 'OFF' }
MATCH_COLUMN_COUNT применяется только к CSV-файлам. Значение по умолчанию — OFF. Он указывает, должна ли COPY команда проверить, соответствует ли команда счетчику строк столбцов в исходных файлах счетчик столбцов целевой таблицы. Применяется следующее поведение:
- Если
MATCH_COLUMN_COUNTимеет значениеOFF:- Команда игнорирует превышение столбцов из исходных строк.
- Команда вставляет
NULLзначения в столбцы, допускающие значение NULL, для строк с меньшим количеством столбцов.
- Команда вставляет
- Если значение не предоставляется столбцу, отличному от null, команда завершается
COPYошибкой.
- Команда игнорирует превышение столбцов из исходных строк.
- Если
MATCH_COLUMN_COUNTимеет значениеON:- Команда
COPYпроверяет, совпадает ли количество столбцов в каждой строке в каждом файле исходного источника с числом столбцов таблицы назначения.
- Команда
- Если имеется несоответствие счетчика столбцов, команда завершается ошибкой
COPY.
Note
MATCH_COLUMN_COUNT работает независимо от MAXERRORS. Несоответствие счетчика столбцов COPY INTO приводит к сбою независимо от MAXERRORSтого,
Использование COPY INTO с OneLake
Используйте COPY INTO для загрузки данных непосредственно из файлов, хранящихся в Fabric OneLake, в существующих элементах. Этот метод устраняет потребность во внешних промежуточных учетных записях, таких как ADLS 2-го поколения или Хранилище BLOB-объектов, и обеспечивает прием, управляемый рабочей областью, с помощью Fabric разрешений. Эта функция поддерживает следующие возможности:
- Чтение из любого расположения в рабочей области и элементе
- Загрузка рабочей области в хранилище в одном клиенте
- Принудительное применение собственных удостоверений с помощью Microsoft Entra ID
Example:
COPY INTO t1
FROM 'https://onelake.dfs.fabric.microsoft.com/<workspaceId>/<lakehouseId>/Files/*.csv'
WITH (
FILE_TYPE = 'CSV',
FIRSTROW = 2
);
Permissions
Разрешения уровня управления
Чтобы выполнить COPY INTO команду, необходимо предоставить членство в роли рабочей области с помощью управления доступом в рабочей области с по крайней мере ролью просмотра. Кроме того, вы можете предоставить доступ к хранилищу пользователю через Item Permissions на портале Fabric с разрешениями на чтение. Чтобы соответствовать принципу наименьшей привилегии, достаточно разрешения на чтение.
Разрешения плоскости данных
После предоставления разрешений уровня управления через роли рабочей области или разрешения элемента, если пользователь имеет разрешения только на чтение на уровне плоскости данных, также предоставьте пользователю INSERT и ADMINISTER DATABASE BULK OPERATIONS разрешения с помощью команд T-SQL.
Например, следующий скрипт T-SQL предоставляет эти разрешения отдельному пользователю с помощью Microsoft Entra ID.
GRANT ADMINISTER DATABASE BULK OPERATIONS to [mike@contoso.com];
GO
GRANT INSERT to [mike@contoso.com];
GO
При использовании параметра файла ошибок пользователь должен иметь минимальное разрешение Хранилище BLOB-объектов участника в контейнере учетной записи хранения.
При использовании OneLake в качестве источника пользователь должен иметь разрешения участника или более высокого уровня для исходной рабочей области (где находится Lakehouse) и целевой рабочей области (где находится хранилище). Microsoft Entra ID и роли рабочей области Fabric управляют всем доступом.
Remarks
Оператор COPY принимает только допустимые символы UTF-8 и UTF-16 для строковых данных и параметров команд. Если вы используете исходные файлы или параметры (например ROWTERMINATOR , или FIELDTERMINATOR) которые содержат недопустимые символы, COPY инструкция может интерпретировать их неправильно и вызвать непредвиденные результаты, такие как повреждение данных или другие сбои. Перед вызовом инструкции COPY убедитесь, что исходные файлы и параметры совместимы с UTF-8 или UTF-16.
Инструкция COPY INTO имеет ограничения на размер отдельных столбцов varchar(max) и varbinary(max), а также на общий размер строки, которую можно получить.
- Parquet: максимальный размер столбца varchar(max)/varbinary(max) размером 16 МБ, максимальный размер строки — 1 ГБ.
- CSV и JSONL: максимальный размер столбца varchar(max)/varbinary(max) 1 МБ, максимальный размер строки — 16 МБ.
Чтобы обеспечить надежное выполнение, не изменяйте исходные файлы и папки во время COPY INTO операции.
- Изменение, удаление или замена всех ссылочных файлов или папок во время выполнения команды может привести к сбою операции или привести к несогласованности приема данных.
- Перед выполнением
COPY INTOубедитесь, что все исходные данные стабильны и не изменяются во время процесса.
Если исходные данные имеют большую точность, чем определение целевого столбца, значение усечено, а не округляется для числовых, дат и типов времени.
Ограничения для OneLake в качестве источника
Поддерживается только проверка подлинности идентификатора Microsoft Entra. Другие методы проверки подлинности, такие как маркеры SAS, общие ключи или строки подключения, не допускаются.
Элементы хранилища не поддерживаются в качестве исходных расположений. Файлы должны исходить из других элементов Fabric, которые предоставляют файлы через хранилище OneLake.
Пути OneLake должны использовать идентификаторы рабочей области и хранилища. Понятные имена рабочих областей или Lakehouse в настоящее время не поддерживаются.
Разрешения участника необходимы для обеих рабочих областей. Выполняющий пользователь должен иметь по крайней мере роль участника в исходной рабочей области Lakehouse и целевой рабочей области Хранилища.
Examples
Дополнительные сведения об использовании COPY INTO в хранилище в Microsoft Fabric см. в разделе "Прием данных" в хранилище в Microsoft Fabric с помощью инструкции COPY.
A. Загрузка из общедоступной учетной записи хранения
В следующем примере показана самая простая форма COPY команды, которая загружает данные из общедоступной учетной записи хранения. В этом примере COPY по умолчанию инструкция соответствует формату CSV-файла элемента строки.
COPY INTO dbo.[lineitem]
FROM 'https://unsecureaccount.blob.core.windows.net/customerdatasets/folder1/lineitem.csv'
Значения COPY команды по умолчанию следующие:
MAXERRORS = 0COMPRESSION(значение по умолчанию не сжато)FIELDQUOTE = '"'FIELDTERMINATOR = ','ROWTERMINATOR = '\n'Important
COPYВоспринимается\nтак\r\nже, как внутри. Дополнительные сведения см. вROWTERMINATORразделе.FIRSTROW = 1ENCODING = 'UTF8'FILE_TYPE = 'CSV'
B. Загрузка с проверкой подлинности с помощью подписи общего доступа (SAS)
В следующем примере загружаются файлы, использующие веб-канал строки в качестве конца строки, например выходные данные UNIX. В этом примере также используется ключ SAS для проверки подлинности в Хранилище BLOB-объектов Azure.
COPY INTO test_1
FROM 'https://myaccount.blob.core.windows.net/myblobcontainer/folder1/'
WITH (
FILE_TYPE = 'CSV',
CREDENTIAL=(IDENTITY= 'Shared Access Signature', SECRET='<Your_SAS_Token>'),
FIELDQUOTE = '"',
FIELDTERMINATOR = ';',
ROWTERMINATOR = '0X0A',
ENCODING = 'UTF8',
MAXERRORS = 10,
ERRORFILE = '/errorsfolder'--path starting from the storage container
)
C. Загрузка со списком столбцов со значениями по умолчанию для проверки подлинности с помощью ключа учетной записи хранения (SAK)
В этом примере производится загрузка файлов с указанием списка столбцов со значениями по умолчанию.
--Note when specifying the column list, input field numbers start from 1
COPY INTO test_1 (Col_one default 'myStringDefault' 1, Col_two default 1 3)
FROM 'https://myaccount.blob.core.windows.net/myblobcontainer/folder1/'
WITH (
FILE_TYPE = 'CSV',
CREDENTIAL=(IDENTITY= 'Storage Account Key', SECRET='<Your_account_key>'),
FIELDQUOTE = '"',
FIELDTERMINATOR=',',
ROWTERMINATOR='0x0A',
ENCODING = 'UTF8',
FIRSTROW = 2
)
D. Загрузка Parquet
В этом примере используется подстановочный знак для загрузки всех файлов Parquet в папку с помощью Entra ID пользователя.
COPY INTO test_parquet
FROM 'https://myaccount.blob.core.windows.net/myblobcontainer/folder1/*.parquet'
WITH (
FILE_TYPE = 'PARQUET'
)
E. Загрузка JSONL
В этом примере используется подстановочный знак для загрузки всех файлов JSONL в папку с помощью Entra ID исполняемого пользователя.
COPY INTO test_jsonl
FROM 'https://myaccount.blob.core.windows.net/myblobcontainer/folder1/*.jsonl'
WITH (
FILE_TYPE = 'JSONL'
)
F. Сопоставление имен столбцов с путями полей в документах JSONL
В следующем примере показан файл JSON Line (JSONL), где каждая строка представляет один объект JSON:
{"CountryKey": 0, "CountryName": "ALGERIA", "RegionID": 0, "Population": 34800000}
{"CountryKey": 1, "CountryName": "ARGENTINA", "RegionID": 1, "Population": 46044703}
{"CountryKey": 2, "CountryName": "BRAZIL", "RegionID": 1, "Population": 203080756}
В COPY INTOэтом случае столбцы таблицы можно сопоставить с определенными полями JSON с помощью выражений пути JSON. Это сопоставление позволяет прием только обязательных полей из исходных данных.
COPY INTO Countries (
CountryID '$.CountryKey',
CountryName '$.CountryName',
RegionID '$.RegionKey',
Population '$.Population'
)
FROM 'https://myaccount.blob.core.windows.net/myblobcontainer/folder1/countries.jsonl'
WITH (
FILE_TYPE = 'JSONL'
)
G. Загрузка данных путем указания подстановочных знаков и нескольких файлов
COPY INTO t1
FROM
'https://myaccount.blob.core.windows.net/myblobcontainer/folder0/*.txt',
'https://myaccount.blob.core.windows.net/myblobcontainer/folder1'
WITH (
FILE_TYPE = 'CSV',
CREDENTIAL=(IDENTITY= 'Shared Access Signature', SECRET='<Your_SAS_Token>')
FIELDTERMINATOR = '|'
)
H. Загрузка данных из OneLake
COPY INTO t1
FROM 'https://onelake.dfs.fabric.microsoft.com/<workspaceId>/<lakehouseId>/Files/*.csv'
WITH (
FILE_TYPE = 'CSV',
FIRSTROW = 2
);