КОПИРОВАТЬ В (Transact-SQL)

Область применения: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 см. в следующих примерах:

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-адрес предоставляет делегированный доступ к ресурсам в учетной записи хранения.
  • Минимальные необходимые разрешения: ЧИТАТЬ, СПИСАТЬ, ЗАПИСЫВАТЬ, СОЗДАВАТЬ, 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файл.

МАКСИМАЛЬНЫЕ ОШИБКИ = 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.

ПЕРВЫЙ РЯД = 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 и АДМИНИСТРИРУЕТ РАЗРЕШЕНИЯ НА МАССОВЫЕ ОПЕРАЦИИ. В Azure Synapse Analytics вам нужны INSERT и АДМИНИСТРИРОВАТЬ DATABASE РАЗРЕШЕНИЯ НА МАССОВЫЕ ОПЕРАЦИИ.

Если пользователь, выполняющий команду 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 = Сессия DATEFORMAT

  • MAXERRORS = 0

  • COMPRESSION по умолчанию не сжат

  • FIELDQUOTE = '"'

  • FIELDTERMINATOR = ','

  • ROWTERMINATOR = '\n'

Important

COPY Воспринимается \n так \r\n же, как внутри. Дополнительные сведения см. в ROWTERMINATOR разделе.

  • FIRSTROW = 1

  • ENCODING = UTF8

  • FILE_TYPE = CSV

  • IDENTITY_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.

Чтобы обойти эту проблему, повторно зарегистрируйте управляемое удостоверение рабочей области:

  1. Установите Azure PowerShell. См. раздел "Установка PowerShell".
  2. Зарегистрируйте управляемое удостоверение рабочей области с помощью PowerShell:
    Connect-AzAccount
    Select-AzSubscription -SubscriptionId <subscriptionId>
    Set-AzSqlServer -ResourceGroupName your-database-server-resourceGroup -ServerName your-SQL-servername -AssignIdentity
    

Область применения:хранилище в Microsoft Fabric

В этой статье объясняется, как использовать COPY оператор в Warehouse в Microsoft Fabric для загрузки из служба хранилища Azure и OneLake. Это COPY заявление обеспечивает наибольшую гибкость для высокопроизводительного ввода данных в ваш склад в Microsoft Fabric и является стратегией ввода данных в ваш склад в Microsoft Fabric.

В Fabric Data Warehouse году COPY оператор поддерживает форматы файлов CSV, JSONL и PARQUET. Поддерживаемые источники данных включают Azure Data Lake Storage 2-го поколения, Хранилище BLOB-объектов Azure и OneLake.

Дополнительные сведения об использовании COPY INTO в хранилище в Microsoft Fabric см. в разделе "Прием данных" в хранилище в Microsoft Fabric с помощью инструкции COPY.

COPY INTO работает в контексте безопасности SQL текущего пользователя. Проверки SQL-прав и атрибуция аудита остаются связаны с этим пользователем. Когда вы указываете CREDENTIAL = (IDENTITY = 'Workspace Identity'), идентификатор рабочего пространства используется только для авторизации доступа к исходным файлам.

Использование 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 = (IDENTITY = '' , SECRET = '') ]
 [ , 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' } ]
 [ , IDENTITY_INSERT = { '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 игнорирует скрытые папки и не возвращает файлы, начинающиеся с подчеркивания (_) или точки (.), если в пути явно не указано. Так происходит даже при указании пути с подстановочным знаком.

Можно указать несколько расположений файлов только из одной учетной записи хранения и контейнера через разделенный запятыми список, например:

  • https://<account>.blob.core.windows.net/<container>/<path>, https://<account>.blob.core.windows.net/<container>/<path>
Wildcards

В маршрут можно включить джокеры:

  • Совпадение имён по пути джокера зависит от регистра.
  • Вы можете уйти от джокера, используя персонажа с обратной чертой (\).

Note

Для повышения производительности не следует указывать подстановочные знаки, расширяющие большее количество файлов. Если возможно, не указывайте подстановочные знаки, а задайте несколько местоположений файлов.

Внешние локации за межсетевым экраном

Чтобы получить доступ к файлам в azure Data Lake Storage (ADLS) 2-го поколения и расположениях хранилища BLOB-объектов Azure, которые находятся за брандмауэром, применяются следующие предварительные требования:

  • Необходимо создать идентификатор рабочего пространства Fabric, где находится ваш склад. Дополнительные сведения о настройке удостоверения рабочей области см. в разделе "Удостоверение рабочей области".
  • Чтобы имитировать личность Fabric Workspace, ваш аккаунт Microsoft Entra ID должен быть участником роли в рабочем пространстве. Разрешения на предмет сами по себе не дают доступа к использованию идентификатора рабочего пространства.
  • Предоставьте доступ к базовым файлам через ролевой контроль доступа 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 указывает удостоверение данных, используемых COPY INTO при авторизации доступа к внешней учетной записи хранения или источнику OneLake. Он не меняет текущий контекст безопасности SQL или идентичность, которая выполняет этот оператор.

В хранилище данных Fabric:

  • COPY INTO не поддерживается, когда общедоступный доступ отключен.
  • Для общедоступных учетных записей хранения поддерживаемыми механизмами проверки подлинности являются идентификатор Microsoft Entra, подписанный URL-адрес (SAS) или ключ учетной записи хранения (SAK).
  • Для публичных аккаунтов хранения за межсетевым экраном поддерживаются Microsoft Entra ID и Workspace Identity.
  • COPY INTOиспользование OneLake в качестве исходного кода поддерживает Microsoft Entra ID и Workspace Identity.

Идентификатор Microsoft Entra выполняющегося пользователя является стандартным учётным данным для доступа к исходнику. Учетные данные не нужно указывать.

  • Проверка подлинности с помощью подписанного URL-адреса (SAS)
    • IDENTITY: константа со значением Shared Access Signature.
    • SECRET Подписанный URL-адрес предоставляет делегированный доступ к ресурсам в учетной записи хранения.
    • Минимальные необходимые разрешения: READ и LIST.
  • Проверка подлинности с помощью ключа учетной записи хранения
    • IDENTITY: константа со значением Storage Account Key.
    • SECRETКлюч учетной записи хранения.
  • Используйте идентичность Fabric Workspace
    • IDENTITY: константа со значением Workspace Identity.
    • SECRET: не требуется.
    • Оператор продолжает выполняться в текущем контексте безопасности SQL текущего пользователя. Этот CREDENTIAL пункт позволяет COPY INTO имитировать идентификатор рабочего пространства только при авторизации доступа к исходнику. Исполняющему пользователю не требуется прямое разрешение на исходные данные.
    • Для Хранилище BLOB-объектов Azure и ADLS Gen2 найдите идентификатор рабочего пространства по имени рабочего пространства и назначьте роль Storage Blob Data Reader на учетной записи или контейнере. Для доступа на уровне каталога ADLS второго поколения предоставьте необходимые разрешения ACL.
    • Для OneLake найдите идентификатор рабочего пространства по имени рабочего пространства, добавьте его в рабочее пространство, содержащее исходные данные, и назначите хотя бы роль Вкладчика в рабочее пространство.

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-адрес предоставляет делегированный доступ к ресурсам в учетной записи хранения.
  • Минимальные необходимые разрешения: ЧИТАТЬ, СПИСАТЬ, ЗАПИСЫВАТЬ, СОЗДАВАТЬ, DELETE

Note

Если вы используете ту же учетную запись хранения для файла ошибок и укажите ERRORFILE путь относительно корневого каталога контейнера, вам не нужно указывать этот ERROR_CREDENTIALфайл.

МАКСИМАЛЬНЫЕ ОШИБКИ = 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.

ПЕРВЫЙ РЯД = 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того,

IDENTITY_INSERT = { 'ON' | 'OFF' }

IDENTITY_INSERT указывает, следует ли использовать значение удостоверения или значения в импортированном файле данных для столбца удостоверений. Если IDENTITY_INSERT есть OFF (по умолчанию), значения идентичности для этого столбца не импортируются. Обратите внимание на следующее поведение команды COPY.

  • Если IDENTITY_INSERT имеет значение OFF, а таблица содержит столбец удостоверений
    • Необходимо указать список столбцов, который не сопоставляет поле ввода с столбцом удостоверений.
  • Если IDENTITY_INSERT имеет значение ON, а таблица содержит столбец удостоверений
    • Если вы передаете список столбцов, он должен сопоставить поле ввода с столбцом удостоверений.
  • Значение по умолчанию не поддерживается для столбца IDENTITY в списке столбцов.
  • Можно задать IDENTITY_INSERT только одну таблицу одновременно.

Для получения дополнительной информации о IDENTITY колонках в Fabric Data Warehouse см. IDENTITY колонки в Fabric Data Warehouse.

Использование COPY INTO с OneLake

Используйте COPY INTO для загрузки данных непосредственно из файлов, хранящихся в Fabric OneLake, в существующих элементах. Этот метод устраняет потребность во внешних промежуточных учетных записях, таких как ADLS 2-го поколения или Хранилище BLOB-объектов, и обеспечивает прием, управляемый рабочей областью, с помощью Fabric разрешений. Эта функция поддерживает следующие возможности:

  • Чтение из любого расположения в рабочей области и элементе
  • Загрузка рабочей области в хранилище в одном клиенте
  • Нативное обеспечение идентификации с помощью Microsoft Entra ID или Workspace Identity

Example:

COPY INTO t1
FROM 'https://onelake.dfs.fabric.microsoft.com/<workspaceId>/<lakehouseId>/Files/*.csv'
WITH (
    FILE_TYPE = 'CSV',
    FIRSTROW = 2
);

Permissions

Разрешения уровня управления

Требование разрешения на управляющей плоскости зависит от используемого для доступа к источнику:

  • Без идентичности рабочего пространства: Предоставить пользователю хотя бы роль Viewer workspace через Управление доступом или поделиться хранилищем с пользователем через Permissions Item с разрешением хотя бы на чтение. Пользователю с доступом на уровне предмета не требуется роль в рабочем пространстве для запуска COPY INTO.
  • С идентичностью рабочего пространства: Когда вы указываете CREDENTIAL = (IDENTITY = 'Workspace Identity'), исполняющий пользователь должен иметь как минимум роль Viewer workspace. Сами по себе разрешения на элементы не дают пользователю права выдавать себя за учетную запись рабочего пространства.

Разрешения плоскости данных

После предоставления разрешений уровня управления через роли рабочей области или разрешения элемента, если пользователь имеет разрешения только на чтение на уровне плоскости данных, также предоставьте пользователю INSERT и ADMINISTER DATABASE BULK OPERATIONS разрешения с помощью команд T-SQL.

Когда вы указываете CREDENTIAL = (IDENTITY = 'Workspace Identity'), предоставляйте выполняемому пользователю INSERT разрешение на целевую таблицу. ADMINISTER DATABASE BULK OPERATIONS Разрешение не требуется, если идентификатор рабочего пространства имитируется для доступа к исходнику.

Например, следующий скрипт T-SQL предоставляет эти разрешения отдельному пользователю с помощью Microsoft Entra ID.

GRANT ADMINISTER DATABASE BULK OPERATIONS to [mike@contoso.com];
GO

GRANT INSERT to [mike@contoso.com];
GO

Например, следующий оператор предоставляет разрешение на уровне таблицы, необходимое при запуске COPY INTO пользователя с Workspace Identity:

GRANT INSERT ON OBJECT::dbo.SalesOrders TO [mike@contoso.com];
GO

При использовании параметра файла ошибок пользователь должен иметь минимальное разрешение Хранилище BLOB-объектов участника в контейнере учетной записи хранения.

При использовании OneLake в качестве источника пользователь должен иметь разрешения участника или более высокого уровня для исходной рабочей области (где находится Lakehouse) и целевой рабочей области (где находится хранилище). Microsoft Entra ID и роли рабочей области Fabric управляют всем доступом.

Разрешения исходного кода для идентификации рабочего пространства

Предоставить идентификатору рабочего пространства доступ к каждому исходному местоположению, используемому :COPY INTO

  • Для Хранилище BLOB-объектов Azure и ADLS Gen2 найдите идентификатор рабочего пространства, используя имя workspace, и назначьте роль Storage Blob Data Reader на учетной записи хранения или контейнере. Для доступа на уровне каталога ADLS второго поколения предоставьте необходимые разрешения ACL. Назначайте права так же, как для пользователя Microsoft Entra.
  • Для OneLake добавьте идентификатор рабочего пространства к рабочему пространству, содержащему исходные данные, используя имя workspace, и назначьте хотя бы роль Contributor workspace.

Important

Политика маркировки чувствительности различается в зависимости от организации. COPY INTO может завершиться сбоем, если к целевому объекту применена метка конфиденциальности с ограничениями, которые препятствуют выполнению операции. Если метка чувствительности вызывает сбой, уберите метку с точки назначения перед повторной попыткой команды.

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 как источника COPY INTO

  • При использовании COPY INTO поддерживаются только Microsoft Entra ID и Fabric Workspace Identity как CREDENTIAL. Другие типы учетных данных, такие как токены SAS, общие ключи или строки соединения, не допускаются.

  • Элементы хранилища не поддерживаются в качестве исходных расположений. Файлы должны исходить из других элементов Fabric, которые предоставляют файлы через хранилище OneLake.

  • Пути OneLake должны использовать идентификаторы рабочей области и хранилища. Понятные имена рабочих областей или Lakehouse в настоящее время не поддерживаются.

  • При использовании идентификатора Microsoft Entra выполняющегося пользователя требуются права автора. Исполняющий пользователь должен иметь как минимум роль участника в исходном рабочем пространстве Lakehouse и целевом складском рабочем пространстве.

  • Идентификация рабочего пространства имеет отдельные требования к разрешениям. Когда вы указываете CREDENTIAL = (IDENTITY = 'Workspace Identity'), идентификатор рабочего пространства должен иметь как минимум роль участника в рабочем пространстве, содержащем исходные данные. Исполняющему пользователю не нужен прямой доступ к исходному рабочему пространству, но он должен иметь хотя бы роль просмотрщика в целевом рабочем пространстве и INSERT разрешение на целевую таблицу.

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 = 0

  • COMPRESSION (значение по умолчанию не сжато)

  • FIELDQUOTE = '"'

  • FIELDTERMINATOR = ','

  • ROWTERMINATOR = '\n'

    Important

    COPY Воспринимается \n так \r\n же, как внутри. Дополнительные сведения см. в ROWTERMINATOR разделе.

  • FIRSTROW = 1

  • ENCODING = '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
);

I. Загрузка данных из ADLS Gen2 с использованием идентичности Fabric Workspace

Следующий пример работает COPY INTO в контексте безопасности SQL текущего пользователя и имитирует идентичность Fabric Workspace для доступа к CSV-файлу в ADLS Gen2. Назначьте идентификатор рабочего пространства роли Storage Blob Data Reader на исходной учетной записи или контейнере. Исполняющий пользователь должен иметь как минимум роль Viewer workspace и INSERT разрешение на целевой таблице.

COPY INTO dbo.SalesOrders
FROM 'https://<storage-account>.dfs.core.windows.net/<container>/orders/*.csv'
WITH (
    FILE_TYPE = 'CSV',
    FIRSTROW = 2,
    CREDENTIAL = (IDENTITY = 'Workspace Identity')
);

К. Загрузка данных из OneLake с использованием идентичности Fabric Workspace

Следующий пример работает COPY INTO в контексте безопасности SQL текущего пользователя и имитирует идентификатор Fabric Workspace для доступа к CSV-файлу в OneLake. Исполняющий пользователь должен иметь хотя бы роль INSERT и разрешение Viewer workspace в целевой таблице, но не нуждается в прямом разрешении на исходный файл.

COPY INTO dbo.SalesOrders
FROM 'https://onelake.dfs.fabric.microsoft.com/<workspace-id>/<item-id>/Files/orders/*.csv'
WITH (
    FILE_TYPE = 'CSV',
    FIRSTROW = 2,
    CREDENTIAL = (IDENTITY = 'Workspace Identity')
);

K. Загрузить данные в IDENTITY столбцы с IDENTITY_INSERT

COPY INTO Опции переопределяют любые настройки сессионного уровня для IDENTITY_INSERT.

COPY INTO dbo.Employees (EmployeeID 1, FirstName 2, LastName 3)
FROM 'https://myaccount.blob.core.windows.net/myblobcontainer/folder1/'
WITH (
    FILE_TYPE = 'CSV',
    IDENTITY_INSERT = 'ON'
);