Aracılığıyla paylaş


COPY INTO (Transact-SQL)

Şunlar için geçerlidir: Azure Synapse Analytics

Bu makalede, dış depolama hesaplarından yüklemek için Azure Synapse Analytics'te COPY deyiminin nasıl kullanılacağı açıklanmaktadır. COPY deyimi, Azure Synapse Analytics'e yüksek aktarım hızına sahip veri alımı için en fazla esnekliği sağlar.

Not

Microsoft Fabric'teki Ambar için COPY INTOadresini ziyaret edin.

Aşağıdaki özellikler için COPY kullanın:

  • Veri ambarı üzerinde katı CONTROL izinlerine gerek kalmadan yüklemek için daha düşük ayrıcalıklı kullanıcılar kullanın
  • Başka bir veritabanı nesnesi oluşturmak zorunda kalmadan tek bir T-SQL deyimi yürütme
  • sınırlayıcı (dize, alan, satır) dizeyle ayrılmış sütunlar içinde kaçış CSV dosyalarını düzgün ayrıştırma ve yükleme
  • Paylaşım Erişim İmzaları (SAS) kullanarak depolama hesabı anahtarlarını göstermeden daha ince bir izin modeli belirtin
  • ERRORFILE konumu için farklı bir depolama hesabı kullanma (REJECTED_ROW_LOCATION)
  • Her hedef sütun için varsayılan değerleri özelleştirin ve belirli hedef sütunlara yüklenecek kaynak veri alanlarını belirtin
  • CSV dosyaları için özel satır sonlandırıcısı, alan sonlandırıcısı ve alan alıntısı belirtme
  • CSV dosyaları için SQL Server Tarih biçimlerini kullanma
  • Depolama konumu yolunda joker karakterler ve birden çok dosya belirtme
  • Otomatik şema bulma, kaynak verileri tanımlama ve hedef tablolara eşleme işlemini basitleştirir
  • Otomatik tablo oluşturma işlemi tabloları otomatik olarak oluşturur ve otomatik şema bulma ile birlikte çalışır
  • Haritalar ve Listeler gibi Parquet dosyalarından karmaşık veri türlerini, verileri önceden işlemek için diğer araçları kullanmadan doğrudan dize sütunlarına yükleyin

Not

Parquet dosyalarından karmaşık veri türlerini yüklemek için otomatik tablo oluşturma AUTO_CREATE_TABLEkullanılarak açılmalıdır.

COPY deyimini kullanarak kapsamlı örnekler ve hızlı başlangıçlar için aşağıdaki belgeleri ziyaret edin:

Not

Microsoft Entra ID daha önce Azure Active Directory (Azure AD) olarak biliniyordu.

Sözdizimi

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' } ]
)

Bağımsız değişken

schema_name

İşlemi gerçekleştiren kullanıcının varsayılan şeması belirtilen tablonun şemasıysa isteğe bağlı. şema belirtilmezse ve COPY işlemini gerçekleştiren kullanıcının varsayılan şeması belirtilen tablonun şemasından farklıysa, COPY iptal edilir ve bir hata iletisi döndürülür.

table_name

Verileri kopyalanacak tablonun adı. Hedef tablo geçici veya kalıcı bir tablo olabilir ve veritabanında zaten mevcut olmalıdır. Otomatik şema algılama modu için sütun listesi sağlamayın.

(column_list)

Kaynak veri alanlarını verileri yüklemek için hedef tablo sütunlarına eşlemek için kullanılan bir veya daha fazla sütunun isteğe bağlı listesi.

AUTO_CREATE_TABLE = 'ON'zaman column_list belirtmeyin.

column_list ayraç içine alınmalı ve virgülle sınırlandırılmalıdır. Sütun listesi aşağıdaki biçimdedir:

[(Column_name [varsayılan Default_value] [Field_number] [,... n])]

  • Column_name - Hedef tablodaki sütunun adı.
  • Default_value - giriş dosyasındaki herhangi bir NULL değerin yerini alan varsayılan değerdir. Varsayılan değer tüm dosya biçimleri için geçerlidir. COPY, sütun listesinden bir sütun atlandığında veya boş bir giriş dosyası alanı olduğunda giriş dosyasından NULL yüklemeyi dener. Varsayılan değer 'default' anahtar sözcüğünden önce
  • Field_number - Hedef sütuna eşlenen giriş dosyası alan numarası.
  • Alan dizin oluşturma 1'de başlar.

Sütun listesi belirtilmediğinde COPY sütunları kaynak ve hedef sırasına göre eşler: Giriş alanı 1 hedef sütun 1'e, 2. alan 2. sütuna vb. gider.

dış konumları

Verileri içeren dosyaların hazırlandığı yerdir. Şu anda Azure Data Lake Storage (ADLS) 2. Nesil ve Azure Blob Depolama desteklenmektedir:

  • Blob Depolama için dış konum :
  • ADLS 2. Nesil: için dış konum

Not

.blob uç noktası ADLS 2. Nesil için de kullanılabilir ve şu anda en iyi performansı verir. Kimlik doğrulama yönteminiz için .dfs gerekli olmadığında .blob uç noktasını kullanın.

  • Hesabı - Depolama hesabı adı

  • Kapsayıcı - Blob kapsayıcı adı

  • Yol - verilerin klasörü veya dosya yolu. Konum kapsayıcıdan başlar. Bir klasör belirtilirse, COPY klasöründeki tüm dosyaları ve tüm alt klasörlerini alır. COPY gizli klasörleri yoksayar ve yolda açıkça belirtilmediği sürece bir alt çizgi (_) veya nokta (.) ile başlayan dosyaları döndürmez. Bu davranış, joker karakter içeren bir yol belirtirken bile aynıdır.

Joker karakterler kartları,

  • Joker karakter yol adı eşleştirme büyük/küçük harfe duyarlıdır
  • Ters eğik çizgi karakteri (\) kullanılarak joker karakterden kaçılabilir
  • Joker karakter genişletmesi özyinelemeli olarak uygulanır. Örneğin, Customer1 altındaki tüm CSV dosyaları (Customer1'in alt dizinleri dahil) aşağıdaki örnekte yüklenir: Account/Container/Customer1/*.csv

Not

En iyi performans için, daha fazla sayıda dosyaya genişletecek joker karakterler belirtmekten kaçının. Mümkünse joker karakter belirtmek yerine birden çok dosya konumunu listeleyin.

Birden çok dosya konumu yalnızca aynı depolama hesabından ve kapsayıcısından virgülle ayrılmış bir liste aracılığıyla belirtilebilir:

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

FILE_TYPE = { 'CSV' | 'PARQUET' | 'ORC' }

FILE_TYPE dış verilerin biçimini belirtir.

  • CSV: RFC 4180 standardıyla uyumlu virgülle ayrılmış değerler dosyasını belirtir.
  • PARQUET: Parquet biçimini belirtir.
  • ORC: İyileştirilmiş Satır Sütunlu (ORC) biçimini belirtir.

Not

PolyBase'deki 'Sınırlandırılmış Metin' dosya türü, varsayılan virgül sınırlayıcının FIELDTERMINATOR parametresi aracılığıyla yapılandırılabildiği 'CSV' dosya biçimiyle değiştirilir.

FILE_FORMAT = external_file_format_name

FILE_FORMAT yalnızca Parquet ve ORC dosyaları için geçerlidir ve dış veriler için dosya türünü ve sıkıştırma yöntemini depolayan dış dosya biçimi nesnesinin adını belirtir. Dış dosya biçimi oluşturmak için CREATE EXTERNAL FILE FORMATkullanın.

CREDENTIAL (IDENTITY = '', SECRET = '')

CREDENTIAL, dış depolama hesabına erişmek için kimlik doğrulama mekanizmasını belirtir. Kimlik doğrulama yöntemleri şunlardır:

CSV Parke ORC
Azure Blob Depolama SAS/MSI/HIZMET SORUMLUSU/ANAHTAR/AAD SAS/ANAHTAR SAS/ANAHTAR
Azure Data Lake 2. Nesil SAS/MSI/HIZMET SORUMLUSU/ANAHTAR/AAD SAS (blob 1 )/MSI (dfs 2 )/HİzMET SORUMLUSU/ANAHTAR/AAD SAS (blob 1 )/MSI (dfs 2 )/HİzMET SORUMLUSU/ANAHTAR/AAD

1: Bu kimlik doğrulama yöntemi için dış konum yolunuzdaki .blob uç noktası (.blob.core.windows.net) gereklidir.

2: Bu kimlik doğrulama yöntemi için dış konum yolunuzdaki .dfs uç noktası (.dfs.core.windows.net) gereklidir.

Not

  • Microsoft Entra Id kullanarak veya genel bir depolama hesabında kimlik doğrulaması yaparken, KIMLIK BILGILERININ belirtilmesi gerekmez.
  • Depolama hesabınız bir sanal ağ ile ilişkiliyse, yönetilen kimlik kullanarak kimlik doğrulaması yapmanız gerekir.
  • Paylaşılan Erişim İmzalarıyla (SAS) Kimlik Doğrulaması

    • KIMLIĞI: 'Paylaşılan Erişim İmzası' değerine sahip bir sabit
    • SECRET:paylaşılan erişim imzası, depolama hesabınızdaki kaynaklara temsilci erişimi sağlar.
    • Gereken en düşük izinler: OKUMA ve LİSTE
  • Hizmet Sorumlularıyla kimlik doğrulaması

    • KIMLIĞI:<OAuth_2.0_Token_EndPoint>@<ClientID>
    • SECRET: Microsoft Entra uygulama hizmeti asıl anahtarı
    • Gereken en düşük RBAC rolleri: Depolama blob verileri katkıda bulunanı, Depolama blob verileri katkıda bulunanı, Depolama blobu veri sahibi veya Depolama blob veri okuyucusu
  • Depolama hesabı anahtarıyla kimlik doğrulaması

    • KIMLIĞI: 'Depolama Hesabı Anahtarı' değerine sahip bir sabit
    • SECRET: Depolama hesabı anahtarı
  • Yönetilen Kimlik (VNet Hizmet Uç Noktaları) ile kimlik doğrulaması

    • KİmLİk: 'Yönetilen Kimlik' değerine sahip sabit
    • Gereken en düşük RBAC rolleri: Azure'de Microsoft Entra kayıtlı mantıksal sunucusu için depolama blobu veri katkıda bulunanı veya Depolama blobu veri sahibi. Synapse Çalışma Alanı ile ilişkilendirilmemiş ayrılmış bir SQL havuzu (eski adı SQL DW) kullanılırken bu RBAC rolü gerekli değildir, ancak yönetilen kimlik, kaynak dosyalara okuma erişimini etkinleştirmek için hedef nesnelerde Erişim Denetim Listesi (ACL) izinleri gerektirir
  • Microsoft Entra kullanıcısıyla kimlik doğrulaması

    • KIMLIK BILGILERI gerekli değildir
    • Gereken en düşük RBAC rolleri: Microsoft Entra kullanıcısı için depolama blob verileri katkıda bulunanı veya Depolama blobu veri sahibi

ERRORFILE = Dizin Konumu

ERRORFILE yalnızca CSV için geçerlidir. COPY deyiminde reddedilen satırların ve karşılık gelen hata dosyasının yazılması gereken dizini belirtir. Depolama hesabından tam yol belirtilebilir veya kapsayıcıya göre yol belirtilebilir. Belirtilen yol yoksa, sizin adınıza bir yol oluşturulur. "_rejectedrows" adıyla bir alt dizin oluşturulur. "_" karakteri, location parametresinde açıkça adlandırılmadığı sürece dizinin diğer veri işleme için kaçış olmasını sağlar.

Not

ERRORFILEgöreli yol geçirildiğinde, yol external_locationiçinde belirtilen kapsayıcı yoluna göredir.

Bu dizinde, YearMonthDay -HourMinuteSecond (Örn. 20180330-173205) biçiminde yük gönderme zamanına göre oluşturulan bir klasör vardır. Bu klasörde, her biri queryID, distributionID ve bir dosya guid'i ile önceden uygulanan neden (Hata) dosyası ve veri (Satır) dosyası olmak üzere iki tür dosya yazılır. Veriler ve nedeni ayrı dosyalarda olduğundan, ilgili dosyaların eşleşen bir ön eki vardır.

ERRORFILE tanımlı depolama hesabının tam yoluna sahipse, bu depolamaya bağlanmak için ERRORFILE_CREDENTIAL kullanılır. Aksi takdirde, CREDENTIAL için belirtilen değer kullanılır. ERRORFILE için kaynak veriler için kullanılan aynı kimlik bilgisi kullanıldığında, ERRORFILE_CREDENTIAL için geçerli olan kısıtlamalar da geçerlidir

ERRORFILE_CREDENTIAL = (IDENTITY= '', SECRET = '')

ERRORFILE_CREDENTIAL yalnızca CSV dosyaları için geçerlidir. Desteklenen veri kaynağı ve kimlik doğrulama yöntemleri şunlardır:

  • Azure Blob Depolama - SAS/SERVICE PRINCIPAL/AAD

  • Azure Data Lake 2. Nesil - SAS/MSI/SERVICE PRINCIPAL/AAD

  • Paylaşılan Erişim İmzalarıyla (SAS) Kimlik Doğrulaması

    • KIMLIĞI: 'Paylaşılan Erişim İmzası' değerine sahip bir sabit
    • SECRET:paylaşılan erişim imzası, depolama hesabınızdaki kaynaklara temsilci erişimi sağlar.
    • Gereken en düşük izinler: READ, LIST, WRITE, CREATE, DELETE
  • Hizmet Sorumlularıyla kimlik doğrulaması

    • KIMLIĞI:<OAuth_2.0_Token_EndPoint>@<ClientID>
    • SECRET: Microsoft Entra uygulama hizmeti asıl anahtarı
    • Gereken en düşük RBAC rolleri: Depolama blob verileri katkıda bulunanı veya Depolama blobu veri sahibi

Not

V1 OAuth 2.0 belirteç uç noktasını kullanma

  • Yönetilen Kimlik (VNet Hizmet Uç Noktaları) ile kimlik doğrulaması

    • KİmLİk: 'Yönetilen Kimlik' değerine sahip sabit
    • Gereken en düşük RBAC rolleri: Microsoft Entra kayıtlı SQL Veritabanı sunucusu için depolama blobu veri katkıda bulunanı veya Depolama blobu veri sahibi
  • Microsoft Entra kullanıcısıyla kimlik doğrulaması

    • KIMLIK BILGILERI gerekli değildir
    • Gereken en düşük RBAC rolleri: Microsoft Entra kullanıcısı için depolama blob verileri katkıda bulunanı veya Depolama blobu veri sahibi

ERRORFILE_CREDENTIAL ile depolama hesabı anahtarı kullanılması desteklenmez.

Not

ERRORFILE dosyanız için aynı depolama hesabını kullanıyor ve kapsayıcının köküne göre ERRORFILE yolunu belirtiyorsanız, ERROR_CREDENTIAL belirtmeniz gerekmez.

MAXERRORS = max_errors

MAXERRORS, COPY işlemi başarısız olmadan önce yükte izin verilen en fazla reddetme satırı sayısını belirtir. COPY işlemi tarafından içeri aktarılabilen her satır yoksayılır ve tek bir hata olarak sayılır. max_errors belirtilmezse, varsayılan değer 0'dır.

MAXERRORS AUTO_CREATE_TABLE ile kullanılamaz.

FILE_TYPE 'PARQUET' olduğunda, veri türü dönüştürme hatalarından kaynaklanan özel durumlar (örn. Parquet ikiliden SQL tamsayısına) yine de COPY INTO hatasına neden olur ve MAXERRORSyok sayılır.

COMPRESSION = { 'DefaultCodec ' | 'Snappy' | 'GZIP' | 'NONE'}

COMPRESSION isteğe bağlıdır ve dış veriler için veri sıkıştırma yöntemini belirtir.

  • CSV, GZIP'i destekler
  • Parquet, GZIP ve Snappy'i destekler
  • ORC, DefaultCodec ve Snappy'i destekler.
  • Zlib, ORC için varsayılan sıkıştırmadır

COPY komutu, bu parametre belirtilmediğinde dosya uzantısına göre sıkıştırma türünü otomatik olarak algılar:

  • .gz - GZIP
  • .snappy – Snappy
  • .deflate - DefaultCodec (yalnızca Parquet ve ORC)

COPY komutu, gzip dosyalarının normal şekilde çalışması için sondaki çöpleri içermesini gerektirir. gzip biçimi, dosyaların öncesinde, arasında veya sonrasında ek bilgi olmadan geçerli üyelerden oluşmasını kesinlikle gerektirir. Gzip olmayan verilerin varlığı gibi bu biçimden herhangi bir sapma COPY komutunun başarısızlığına neden olur. COPY'nin bu dosyaları başarıyla işleyebilmesini sağlamak için gzip dosyalarının sonunda sondaki çöplerin olmadığından emin olun.

FIELDQUOTE = 'field_quote'

FIELDQUOTE CSV için geçerlidir ve CSV dosyasında tırnak karakteri (dize sınırlayıcısı) olarak kullanılan tek bir karakteri belirtir. Belirtilmezse, teklif karakteri (") RFC 4180 standardında tanımlandığı gibi tırnak karakteri olarak kullanılır. FIELDQUOTE için onaltılık gösterimi de desteklenir. FIELDQUOTE için UTF-8 ile genişletilmiş ASCII ve çok baytlı karakterler desteklenmez.

Not

FIELDQUOTE karakterleri, çift FIELDQUOTE (sınırlayıcı) varlığının bulunduğu dize sütunlarında kaçış olarak kullanılır.

FIELDTERMINATOR = 'field_terminator'

FIELDTERMINATOR Yalnızca CSV için geçerlidir. CSV dosyasında kullanılan alan sonlandırıcısını belirtir. Alan sonlandırıcısı onaltılık gösterimi kullanılarak belirtilebilir. Alan sonlandırıcısı çok karakterli olabilir. Varsayılan alan sonlandırıcısı bir (,) şeklindedir. FIELDTERMINATOR için UTF-8 ile genişletilmiş ASCII ve çok baytlı karakterler desteklenmez.

SATIR SONLANDıRıCıSI = 'row_terminator'

ROW TERMINATOR Yalnızca CSV için geçerlidir. CSV dosyasında kullanılan satır sonlandırıcısını belirtir. Satır sonlandırıcısı onaltılık gösterimi kullanılarak belirtilebilir. Satır sonlandırıcısı çok karakterli olabilir. Varsayılan olarak, satır sonlandırıcısı \r\n.

COPY komutu, \r\nile sonuçlanacak \n (yeni satır) belirtirken \r karakterine ön ek ekler. Yalnızca \n karakteri belirtmek için onaltılık gösterimi (0x0A) kullanın. Çok karakterli satır sonlandırıcılarını onaltılık olarak belirtirken, her karakter arasında 0x belirtmeyin.

ROW TERMINATOR için UTF-8 ile genişletilmiş ASCII ve çok baytlı karakterler desteklenmez.

FIRSTROW = First_row_int

FIRSTROW CSV için geçerlidir ve COPY komutu için tüm dosyalarda ilk okunan satır numarasını belirtir. Değerler, varsayılan değer olan 1'den başlar. Değer iki olarak ayarlanırsa, veriler yüklendiğinde her dosyadaki (üst bilgi satırı) ilk satır atlanır. Satır sonlandırıcılarının varlığına bağlı olarak satırlar atlanır.

DATEFORMAT = { 'mdy' | 'dmy' | 'ymd' | 'ydm' | 'myd' | 'dym' }

DATEFORMAT yalnızca CSV için geçerlidir ve SQL Server tarih biçimlerine eşleme tarihi biçimini belirtir. Tüm Transact-SQL tarih ve saat veri türlerine ve işlevlerine genel bakış için bkz. Tarih ve Saat Veri Türleri ve İşlevleri (Transact-SQL). COPY komutundaki DATEFORMAT,oturum düzeyinde yapılandırılmış DATEFORMAT'den önceliklidir.

KODLAMA = 'UTF8' | 'UTF16'

KODLAMA yalnızca CSV için geçerlidir. Varsayılan değer UTF8'dir. COPY komutu tarafından yüklenen dosyalar için veri kodlama standardını belirtir.

IDENTITY_INSERT = 'ON' | 'OFF'

IDENTITY_INSERT, içeri aktarılan veri dosyasındaki kimlik değerinin veya değerlerinin kimlik sütunu için kullanılıp kullanılmayacağını belirtir. IDENTITY_INSERT KAPALI (varsayılan) ise, bu sütunun kimlik değerleri doğrulanır ancak içeri aktarılmaz. Azure Synapse Analytics, tablo oluşturma sırasında belirtilen tohum ve artım değerlerine göre otomatik olarak benzersiz değerler atar. COPY komutuyla aşağıdaki davranışa dikkat edin:

  • IDENTITY_INSERT KAPALI ise ve tabloda bir kimlik sütunu varsa
    • Giriş alanını kimlik sütunuyla eşlemeyen bir sütun listesi belirtilmelidir.
  • IDENTITY_INSERT AÇıKsa ve tabloda bir kimlik sütunu varsa
    • Sütun listesi geçirilirse, bir giriş alanını kimlik sütununa eşlemesi gerekir.
  • Varsayılan değer, sütun listesindeki KİmLİk SÜTUNU için desteklenmez.
  • IDENTITY_INSERT aynı anda yalnızca bir tablo için ayarlanabilir.

AUTO_CREATE_TABLE = { 'ON' | 'OFF' }

AUTO_CREATE_TABLE, otomatik şema bulma ile birlikte çalışarak tablonun otomatik olarak oluşturulup oluşturulamadığını belirtir. Yalnızca Parquet dosyaları için kullanılabilir.

  • ON: Otomatik tablo oluşturmayı etkinleştirir. COPY INTO işlemi, yüklenecek dosyanın yapısını bularak otomatik olarak yeni bir tablo oluşturur. Parquet dosyalarının otomatik şema bulma avantajından yararlanmak için önceden var olan tablolarla da kullanılabilir.
  • KAPALI: Otomatik tablo oluşturma etkin değil. Temerrüt.

Not

Otomatik tablo oluşturma, otomatik şema bulma ile birlikte çalışır. Otomatik tablo oluşturma varsayılan olarak ETKINLEŞTIRILMEZ.

AUTO_CREATE_TABLE = 'AÇIK' ile COPY INTO kullanarak Parquet dosyalarından karma dağıtılmış tablolara yüklemeyin.

Parquet dosyaları COPY INTO kullanılarak karma dağıtılmış tablolara yüklenecekse, bunu bir hepsini bir kez deneme hazırlama tablosuna yükleyin ve ardından INSERT ... Bu tablodan hedef karma dağıtılmış tabloya SELECT yapın.

İzinler

COPY komutunu yürüten kullanıcının aşağıdaki izinlere sahip olması gerekir:

INSERT ve ADMINISTER BULK OPERATIONS izinleri gerektirir. Azure Synapse Analytics'te INSERT ve ADMINISTER DATABASE BULK OPERATIONS izinleri gereklidir.

Ayrıca COPY komutunu yürüten kullanıcı da yeni bir tablo oluşturmayı ve içine veri yüklemeyi planlıyorsa CREATE TABLE ve ALTER ON SCHEMA izinleri gerektirir.

Örneğin, mike@contoso.comHR şemasında yeni bir tablo oluşturmak ve bir Parquet dosyasından veri eklemek için COPY kullanmasına izin vermek için aşağıdaki Transact-SQL örneğini kullanın:

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];

Açıklamalar

COPY deyimi, satır verileri ve komut parametreleri için yalnızca UTF-8 ve UTF-16 geçerli karakterleri kabul eder. Geçersiz karakterler kullanan kaynak dosyalar veya parametreler (ROW TERMINATOR veya FIELD TERMINATOR gibi) COPY deyimi tarafından yanlış yorumlanabilir ve veri bozulması veya diğer hatalar gibi beklenmeyen sonuçlara neden olabilir. COPY deyimini çağırmadan önce kaynak dosyalarınızın ve parametrelerinizin UTF-8 veya UTF-16 uyumlu olduğundan emin olun.

Örnekler

A. Genel depolama hesabından yükleme

Aşağıdaki örnek, ortak depolama hesabından veri yükleyen COPY komutunun en basit biçimidir. Bu örnekte COPY deyiminin varsayılanları, satır öğesi csv dosyasının biçimiyle eşleşmektedir.

COPY INTO dbo.[lineitem]
FROM 'https://unsecureaccount.blob.core.windows.net/customerdatasets/folder1/lineitem.csv'
WITH (FIELDTERMINATOR = '|')

COPY komutunun varsayılan değerleri şunlardır:

  • DATEFORMAT = Oturum DATEFORMAT

  • MAXERRORS = 0

  • SıKıŞTıRMA varsayılanı sıkıştırılmamış

  • FIELDQUOTE = '"'

  • FIELDTERMINATOR = ','

  • ROWTERMINATOR = '\n'

Önemli

COPY, \n dahili olarak \r\n olarak ele alır. Daha fazla bilgi için ROWTERMINATOR bölümüne bakın.

  • FIRSTROW = 1

  • KODLAMA = 'UTF8'

  • FILE_TYPE = 'CSV'

  • IDENTITY_INSERT = 'KAPALI'

B. Paylaşım Erişim İmzası (SAS) aracılığıyla yük kimlik doğrulaması

Aşağıdaki örnek, unix çıkışı gibi satır sonlandırıcısı olarak satır akışını kullanan dosyaları yükler. Bu örnek, Azure Blob Depolama'da kimlik doğrulaması yapmak için bir SAS anahtarı da kullanır.

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. Depolama Hesabı Anahtarı aracılığıyla kimlik doğrulaması varsayılan değerleri içeren bir sütun listesiyle yükleme

Bu örnek, varsayılan değerlerle bir sütun listesi belirten dosyaları yükler.

--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>'),
    --CREDENTIAL should look something like this:
    --CREDENTIAL=(IDENTITY= 'Storage Account Key', SECRET='x6RWv4It5F2msnjelv3H4DA80n0PQW0daPdw43jM0nyetx4c6CpDkdj3986DX5AHFMIf/YN4y6kkCnU8lb+Wx0Pj+6MDw=='),
    FIELDQUOTE = '"',
    FIELDTERMINATOR=',',
    ROWTERMINATOR='0x0A',
    ENCODING = 'UTF8',
    FIRSTROW = 2
)

D. Mevcut dosya biçimi nesnesini kullanarak Parquet veya ORC yükleme

Bu örnekte, tüm Parquet dosyalarını bir klasörün altına yüklemek için joker karakter kullanılır.

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. Joker kartları ve birden çok dosyayı belirtmeyi yükleme

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 kimlik bilgilerini kullanarak yükleme

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. Otomatik şema algılama kullanarak yükleme

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'
)

SSS

COPY komutunun PolyBase ile karşılaştırıldığında performansı nedir?

COPY komutu, iş yükünüze bağlı olarak daha iyi performansa sahiptir.

  • Sıkıştırılmış dosyalar otomatik olarak bölünemez. En iyi yükleme performansı için sıkıştırılmış CSV'leri yüklerken girişinizi birden çok dosyaya bölmeyi göz önünde bulundurun.

  • Büyük sıkıştırılmamış CSV dosyaları otomatik olarak bölünebilir ve paralel olarak yüklenebilir, bu nedenle çoğu durumda sıkıştırılmamış CSV dosyalarını el ile bölmeniz gerekmez. Veri özellikleri nedeniyle otomatik dosya bölmenin mümkün olmadığı bazı durumlarda, büyük CSV'lerin el ile bölünmesi performansa hala fayda sağlayabilir.

Sıkıştırılmış CSV dosyalarını yüken COPY komutu için dosya bölme kılavuzu nedir?

Dosya sayısıyla ilgili yönergeler aşağıdaki tabloda özetlenmiştir. Önerilen dosya sayısına ulaşıldığında, dosyalar ne kadar büyük olursa o kadar iyi bir performans elde etmiş olursunuz. Dosya sayısı, 60 ile çarpılan işlem düğümü sayısına göre belirlenir. Örneğin, 6000DWU'da 12 işlem düğümü ve 12*60 = 720 bölüm vardır. Basit bir dosya bölme deneyimi için dosya bölmeleriyle COPY yük aktarım hızını en üst düzeye çıkarma bölümüne bakın.

DWU #Files
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

Parquet veya ORC dosyalarını yüken COPY komutu için dosya bölme kılavuzu nedir?

COPY komutu dosyaları otomatik olarak böldüğünden Parquet ve ORC dosyalarını bölmeye gerek yoktur. En iyi performans için Azure depolama hesabındaki Parquet ve ORC dosyaları 256 MB veya daha büyük olmalıdır.

Dosyaların sayısı veya boyutuyla ilgili herhangi bir sınırlama var mı?

Dosyaların sayısı veya boyutuyla ilgili herhangi bir sınırlama yoktur; ancak en iyi performans için en az 4 MB olan dosyaları öneririz.

COPY deyimiyle ilgili bilinen sorunlar var mı?

7 Aralık 2020'den önce oluşturulmuş bir Azure Synapse çalışma alanınız varsa, Yönetilen Kimlik kullanarak kimlik doğrulaması yaparken benzer bir hata iletisiyle karşılaşabilirsiniz: com.microsoft.sqlserver.jdbc.SQLServerException: Managed Service Identity has not been enabled on this server. Please enable Managed Service Identity and try again.

Çalışma alanının yönetilen kimliğini yeniden kaydederek bu sorunu geçici olarak çözmek için şu adımları izleyin:

  1. Azure PowerShell'i yükleyin. PowerShellyükleme bakın.
  2. PowerShell kullanarak çalışma alanınızın yönetilen kimliğini kaydedin:
    Connect-AzAccount
    Select-AzSubscription -SubscriptionId <subscriptionId>
    Set-AzSqlServer -ResourceGroupName your-database-server-resourceGroup -ServerName your-SQL-servername -AssignIdentity
    

Şunlar için geçerlidir: Microsoft FabricAmbarı

Bu makalede, dış depolama hesaplarından yükleme için Microsoft Fabric'teki Ambar'daki COPY deyiminin nasıl kullanılacağı açıklanmaktadır. COPY deyimi, Ambarınıza yüksek aktarım hızına sahip veri alımı için en fazla esnekliği sağlar veAmbarınıza veri alma strateji olarak kullanılır.

Microsoft Fabric'te, COPY (Transact-SQL) deyimi şu anda PARQUET ve CSV dosya biçimlerini destekler. Veri kaynakları için yalnızca Azure Data Lake Storage 2. Nesil hesapları desteklenir.

Microsoft Fabric'teki Ambarınızda COPY INTO kullanma hakkında daha fazla bilgi için bkz.COPY deyimini kullanarak verileri Ambarınıza alma .

Varsayılan olarak, COPY INTO yürüten Entra Id kullanıcısı olarak kimlik doğrulaması yapar.

Not

Azure Synapse Analytics için COPY INTO for Azure Synapse Analyticsadresini ziyaret edin.

Aşağıdaki özellikler için COPY kullanın:

  • Veri ambarı üzerinde katı CONTROL izinlerine gerek kalmadan yüklemek için daha düşük ayrıcalıklı kullanıcıları kullanın.
  • Başka bir veritabanı nesnesi oluşturmak zorunda kalmadan tek bir T-SQL deyimi yürütür.
  • sınırlayıcıların (dize, alan, satır) dizeyle ayrılmış sütunlarda kaçış olduğu CSV dosyalarını düzgün bir şekilde ayrıştırıp yükleyin.
  • Paylaşım Erişim İmzaları (SAS) kullanarak depolama hesabı anahtarlarını göstermeden daha ince bir izin modeli belirtin.
  • ERRORFILE konumu (REJECTED_ROW_LOCATION) için farklı bir depolama hesabı kullanın.
  • Her hedef sütun için varsayılan değerleri özelleştirin ve belirli hedef sütunlara yüklenecek kaynak veri alanlarını belirtin.
  • CSV dosyaları için özel satır sonlandırıcısı, alan sonlandırıcısı ve alan alıntısı belirtme
  • Depolama konumu yolunda joker karakterler ve birden çok dosya belirtin.
  • Veri alımı seçenekleri ve en iyi yöntemler hakkında daha fazla bilgi için bkz.COPY deyimini kullanarak verileri Ambarınıza alma .

Sözdizimi

COPY INTO [ warehouse_name. ] [ schema_name. ] table_name
[ (Column_list) ]
FROM '<external_location>' [ , ...n ]
WITH
 (
 [ FILE_TYPE = { 'CSV' | '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' } ]
)

Bağımsız değişken

warehouse_name

İşlemi gerçekleştiren kullanıcının geçerli ambarı belirtilen tablonun ambarıysa isteğe bağlıdır. ambar belirtilmezse ve belirtilen şema ve tablo geçerli ambarda yoksa COPY başarısız olur ve bir hata iletisi döndürülür.

schema_name

İşlemi gerçekleştiren kullanıcının varsayılan şeması belirtilen tablonun şemasıysa isteğe bağlı. şema belirtilmezse ve COPY işlemini gerçekleştiren kullanıcının varsayılan şeması belirtilen tablonun şemasından farklıysa, COPY iptal edilir ve bir hata iletisi döndürülür.

table_name

Verileri kopyalanacak tablonun adı. Hedef tablo ambarda zaten mevcut olmalıdır.

(column_list)

Kaynak veri alanlarını verileri yüklemek için hedef tablo sütunlarına eşlemek için kullanılan bir veya daha fazla sütunun isteğe bağlı listesi.

column_list ayraç içine alınmalı ve virgülle sınırlandırılmalıdır. Sütun listesi aşağıdaki biçimdedir:

[(Column_name [varsayılan Default_value] [Field_number] [,... n])]

  • Column_name - Hedef tablodaki sütunun adı.
  • Default_value - giriş dosyasındaki herhangi bir NULL değerin yerini alan varsayılan değerdir. Varsayılan değer tüm dosya biçimleri için geçerlidir. COPY, sütun listesinden bir sütun atlandığında veya boş bir giriş dosyası alanı olduğunda giriş dosyasından NULL yüklemeyi dener. Varsayılan değerin önüne 'default' anahtar sözcüğü eklenir
  • Field_number - Hedef sütuna eşlenen giriş dosyası alan numarası.
  • Alan dizin oluşturma 1'de başlar.

column_list belirtilmediğinde COPY sütunları kaynak ve hedef sırasına göre eşler: Giriş alanı 1 hedef sütun 1'e, alan 2 sütun 2'ye vb. gider.

Not

Microsoft Fabric'teki Ambar'da Parquet dosyalarıyla çalışırken, sütun adlarının kaynak ve hedefte tam olarak eşleşmesi gerekir. Hedef tablodaki sütunun adı parquet dosyasındaki sütun adından farklıysa, hedef tablo sütunu NULL ile doldurulur.

Sütun listesi belirtilmediğinde COPY sütunları kaynak ve hedef sırasına göre eşler: Giriş alanı 1 hedef sütun 1'e, 2. alan 2. sütuna vb. gider.

dış konum

Not

Fabric OneLake yolları şu anda desteklenmemektedir, yalnızca BLOB ve ADLS 2. Nesil depolama hesapları desteklenmektedir.

Verileri içeren dosyaların nerede hazırlandığı belirtir. Şu anda Azure Data Lake Storage (ADLS) 2. Nesil ve Azure Blob Depolama desteklenmektedir:

  • Blob Depolama için dış konum :
  • ADLS 2. Nesil: için dış konum

Azure Data Lake Storage (ADLS) 2. Nesil, Azure Blob Depolama'dan (eski) daha iyi performans sunar. Mümkün olduğunda bir ADLS 2. Nesil hesabı kullanmayı göz önünde bulundurun.

Not

.blob uç noktası ADLS 2. Nesil için de kullanılabilir ve şu anda en iyi performansı verir. Kimlik doğrulama yönteminiz için .dfs gerekli olmadığında .blob uç noktasını kullanın.

  • Hesabı - Depolama hesabı adı

  • Kapsayıcı - Blob kapsayıcı adı

  • Yol - verilerin klasörü veya dosya yolu. Konum kapsayıcıdan başlar. Bir klasör belirtilirse, COPY klasöründeki tüm dosyaları ve tüm alt klasörlerini alır. COPY gizli klasörleri yoksayar ve yolda açıkça belirtilmediği sürece alt çizgi (_) veya nokta (.) ile başlayan dosyaları döndürmez. Bu davranış, joker karakter içeren bir yol belirtirken bile aynıdır.

Joker karakterler,

  • Joker karakter yol adı eşleştirme büyük/küçük harfe duyarlıdır
  • Ters eğik çizgi karakteri (\) kullanılarak joker karakterden kaçılabilir

Not

En iyi performans için, daha fazla sayıda dosyaya genişletecek joker karakterler belirtmekten kaçının. Mümkünse joker karakter belirtmek yerine birden çok dosya konumunu listeleyin.

Birden çok dosya konumu yalnızca aynı depolama hesabından ve kapsayıcısından virgülle ayrılmış bir liste aracılığıyla belirtilebilir:

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

Güvenlik duvarı arkasındaki dış konumları

Güvenlik duvarının arkasındaki Azure Data Lake Storage (ADLS) 2. Nesil ve Azure Blob Depolama konumlarında dosyalara erişmek için aşağıdaki önkoşullar geçerlidir:

  • Ambarınızı barındıran çalışma alanı için çalışma alanı kimliği sağlanmalıdır. Çalışma alanı kimliği ayarlama hakkında daha fazla bilgi için bkz. çalışma alanı kimliği.
  • Entra Id hesabınızın çalışma alanı kimliğini kullanabilmesi gerekir.
  • Entra Id hesabınızın azure rol tabanlı erişim denetimi (RBAC) veya data lake ACL'leriaracılığıyla temel dosyalara erişimi olmalıdır.
  • Ambarı barındıran Doku çalışma alanınızkaynak örneği kuralı olarak eklenmelidir. Doku çalışma alanınızı bir kaynak örneği kuralıyla ekleme hakkında daha fazla bilgi için bkz. Kaynak örneği kuralı.

FILE_TYPE = { 'CSV' | 'PARQUET' }

FILE_TYPE dış verilerin biçimini belirtir.

  • CSV: RFC 4180 standardıyla uyumlu virgülle ayrılmış değerler dosyasını belirtir.
  • PARQUET: Parquet biçimini belirtir.

CREDENTIAL (IDENTITY = '', SECRET = '')

CREDENTIAL, dış depolama hesabına erişmek için kimlik doğrulama mekanizmasını belirtir. Microsoft Fabric'teki Ambar'da desteklenen tek kimlik doğrulama mekanizmaları Paylaşılan Erişim İmzası (SAS) ve Depolama Hesabı Anahtarı (SAK) 'dır. Kullanıcının EntraID kimlik doğrulaması varsayılandır, kimlik bilgilerinin belirtilmesi gerekmez.

Not

Genel depolama hesabı kullanılırken, KIMLIK BILGILERININ belirtilmesi gerekmez. Varsayılan olarak, yürüten kullanıcının Entra Kimliği kullanılır.

  • Paylaşılan Erişim İmzası (SAS) ile kimlik doğrulaması

    • KIMLIĞI: 'Paylaşılan Erişim İmzası' değerine sahip bir sabit
    • SECRET:paylaşılan erişim imzası, depolama hesabınızdaki kaynaklara temsilci erişimi sağlar.
    • Gereken en düşük izinler: OKUMA ve LİSTE
  • Depolama Hesabı Anahtarı ile kimlik doğrulaması

    • KIMLIĞI: 'Depolama Hesabı Anahtarı' değerine sahip bir sabit
    • SECRET: Depolama hesabı anahtarı

ERRORFILE = Dizin Konumu

ERRORFILE yalnızca CSV için geçerlidir. Reddedilen satırların ve ilgili hata dosyasının yazılacağı dizini belirtir. Depolama hesabından tam yol belirtilebilir veya kapsayıcıya göre yol belirtilebilir. Belirtilen yol yoksa, sizin adınıza bir yol oluşturulur. "_rejectedrows" adıyla bir alt dizin oluşturulur. "_" karakteri, location parametresinde açıkça adlandırılmadığı sürece dizinin diğer veri işleme için kaçış olmasını sağlar.

Not

ERRORFILEgöreli yol geçirildiğinde, yol external_locationiçinde belirtilen kapsayıcı yoluna göredir.

Bu dizinde, YearMonthDay -HourMinuteSecond (Örn. 20180330-173205) biçiminde yük gönderme zamanına göre oluşturulan bir klasör vardır. Bu klasörde deyim kimliğine sahip bir klasör oluşturulur ve bu klasörün altına iki tür dosya yazılır: hata. Reddetme nedenlerini içeren Json dosyası ve reddedilen satırları içeren bir row.csv dosyası.

ERRORFILE tanımlı depolama hesabının tam yoluna sahipse, bu depolamaya bağlanmak için ERRORFILE_CREDENTIAL kullanılır. Aksi takdirde, CREDENTIAL için belirtilen değer kullanılır. ERRORFILE için kaynak veriler için kullanılan aynı kimlik bilgisi kullanıldığında, ERRORFILE_CREDENTIAL için geçerli olan kısıtlamalar da geçerlidir.

ERRORFILE_CREDENTIAL = (IDENTITY= '', SECRET = '')

ERRORFILE_CREDENTIAL yalnızca CSV dosyaları için geçerlidir. Microsoft Fabric'teki Ambar'da desteklenen tek kimlik doğrulama mekanizması Paylaşılan Erişim İmzası (SAS) mekanizmasıdır.

  • Paylaşılan Erişim İmzalarıyla (SAS) Kimlik Doğrulaması
    • KIMLIĞI: 'Paylaşılan Erişim İmzası' değerine sahip bir sabit
    • SECRET:paylaşılan erişim imzası, depolama hesabınızdaki kaynaklara temsilci erişimi sağlar.
    • Gereken en düşük izinler: READ, LIST, WRITE, CREATE, DELETE

Not

ERRORFILE dosyanız için aynı depolama hesabını kullanıyor ve kapsayıcının köküne göre ERRORFILE yolunu belirtiyorsanız, ERROR_CREDENTIAL belirtmeniz gerekmez.

MAXERRORS = max_errors

MAXERRORS, COPY işlemi başarısız olmadan önce yükte izin verilen en fazla reddetme satırı sayısını belirtir. COPY işleminin içeri aktaramadıklarından her satır yoksayılır ve tek bir hata olarak sayılır. max_errors belirtilmezse, varsayılan değer 0'dır.

Microsoft Fabric'te MAXERRORSFILE_TYPE 'PARQUET' olduğunda kullanılamaz.

COMPRESSION = { 'Snappy' | 'GZIP' | 'NONE'}

COMPRESSION isteğe bağlıdır ve dış veriler için veri sıkıştırma yöntemini belirtir.

  • CSV, GZIP'i destekler
  • Parquet, GZIP ve Snappy'i destekler

COPY komutu, bu parametre belirtilmediğinde dosya uzantısına göre sıkıştırma türünü otomatik olarak algılar:

  • .gz - GZIP

Sıkıştırılmış dosyaların yüklenmesi şu anda yalnızca PARSER_VERSION 1.0 ile desteklenmektedir.

COPY komutu, gzip dosyalarının normal şekilde çalışması için sondaki çöpleri içermesini gerektirir. gzip biçimi, dosyaların öncesinde, arasında veya sonrasında ek bilgi olmadan geçerli üyelerden oluşmasını kesinlikle gerektirir. Gzip olmayan verilerin varlığı gibi bu biçimden herhangi bir sapma COPY komutunun başarısızlığına neden olur. COPY'nin bu dosyaları başarıyla işleyebilmesini sağlamak için gzip dosyalarının sonunda sondaki çöplerin olmadığından emin olun.

FIELDQUOTE = 'field_quote'

FIELDQUOTE yalnızca CSV için geçerlidir. CSV dosyasında tırnak karakteri (dize sınırlayıcısı) olarak kullanılan tek bir karakteri belirtir. Belirtilmezse, teklif karakteri (") RFC 4180 standardında tanımlandığı gibi tırnak karakteri olarak kullanılır. FIELDQUOTE için onaltılık gösterimi de desteklenir. FIELDQUOTE için UTF-8 ile genişletilmiş ASCII ve çok baytlı karakterler desteklenmez.

Not

FIELDQUOTE karakterleri, çift FIELDQUOTE (sınırlayıcı) varlığının bulunduğu dize sütunlarında kaçış olarak kullanılır.

FIELDTERMINATOR = 'field_terminator'

FIELDTERMINATOR yalnızca CSV için geçerlidir. CSV dosyasında kullanılan alan sonlandırıcısını belirtir. Alan sonlandırıcısı onaltılık gösterimi kullanılarak da belirtilebilir. Alan sonlandırıcısı çok karakterli olabilir. Varsayılan alan sonlandırıcısı bir (,) şeklindedir. FIELDTERMINATOR için UTF-8 ile genişletilmiş ASCII ve çok baytlı karakterler desteklenmez.

ROWTERMINATOR = 'row_terminator'

ROWTERMINATOR yalnızca CSV için geçerlidir. CSV dosyasında kullanılan satır sonlandırıcısını belirtir. Satır sonlandırıcısı onaltılık gösterimi kullanılarak belirtilebilir. Satır sonlandırıcısı çok karakterli olabilir. Varsayılan sonlandırıcılar \r\n, \nve \r'dır.

COPY komutu, \r\nile sonuçlanacak \n (yeni satır) belirtirken \r karakterine ön ek ekler. Yalnızca \n karakteri belirtmek için onaltılık gösterimi (0x0A) kullanın. Çok karakterli satır sonlandırıcılarını onaltılık olarak belirtirken, her karakter arasında 0x belirtmeyin.

ROWTERMINATOR için UTF-8 ile genişletilmiş ASCII ve çok baytlı karakterler desteklenmez.

FIRSTROW = First_row_int

FIRSTROW yalnızca CSV için geçerlidir. COPY komutu için tüm dosyalarda önce okunan satır numarasını belirtir. Değerler, varsayılan değer olan 1'den başlar. Değer iki olarak ayarlanırsa, veriler yüklendiğinde her dosyadaki (üst bilgi satırı) ilk satır atlanır. Satır sonlandırıcılarının varlığına bağlı olarak satırlar atlanır.

DATEFORMAT = { 'mdy' | 'dmy' | 'ymd' | 'ydm' | 'myd' | 'dym' }

DATEFORMAT yalnızca CSV için geçerlidir ve SQL Server tarih biçimlerine eşleme tarihi biçimini belirtir. Tüm Transact-SQL tarih ve saat veri türlerine ve işlevlerine genel bakış için bkz. Tarih ve Saat Veri Türleri ve İşlevleri (Transact-SQL). COPY komutundaki DATEFORMAT,oturum düzeyinde yapılandırılmış DATEFORMAT'den önceliklidir.

KODLAMA = 'UTF8' | 'UTF16'

KODLAMA yalnızca CSV için geçerlidir. Varsayılan değer UTF8'dir. COPY komutu tarafından yüklenen dosyalar için veri kodlama standardını belirtir.

PARSER_VERSION = { '1.0' | '2.0' }

PARSER_VERSION yalnızca CSV için geçerlidir. Varsayılan değer 2.0'dır. Kaynak dosya türü CSV olduğunda alma için kullanılan dosya ayrıştırıcısını belirtir. 2.0 ayrıştırıcısı, CSV dosyalarının alımı için gelişmiş performans sunar.

Ayrıştırıcı sürüm 2.0 aşağıdaki sınırlamalara sahiptir:

  • Sıkıştırılmış CSV dosyaları desteklenmez
  • UTF-16 kodlamalı dosyalar desteklenmez
  • Çok karakterli veya çok baytlı ROWTERMINATOR, FIELDTERMINATOR veya FIELDQUOTE desteklenmez. Ancak, '\r\n' varsayılan ROWTERMINATOR olarak kabul edilir

UTF-8 dosyalarıyla ayrıştırıcı sürüm 1.0 kullanılırken, FIELDTERMINATOR için çok baytlı ve çok karakterli sonlandırıcılar desteklenmez.

Ayrıştırıcı sürüm 1.0 yalnızca geriye dönük uyumluluk için kullanılabilir ve yalnızca bu sınırlamalarla karşılaşıldığında kullanılmalıdır.

Not

COPY INTO sıkıştırılmış CSV dosyaları veya UTF-16 kodlamalı dosyalarla kullanıldığında, COPY INTO kullanıcı eylemi gerekmeden otomatik olarak PARSER_VERSION 1.0'a geçer. FIELDTERMINATOR veya ROWTERMINATOR üzerindeki çok karakterli sonlandırıcılar için COPY INTO deyimi başarısız olur. Çok karakterli ayırıcılar gerekiyorsa PARSER_VERSION = '1.0' kullanın.

İzinler

COPY komutu, çalışma alanı düzeyinde en az KATKıDA BULUNAN rolü veya alternatif olarak çalışma alanı düzeyinde GÖRÜNTÜLEYICIsi rolüne ek olarak VERITABANı TOPLU İşlemLERINI YÖNET veritabanı izni ve tablo nesneleri üzerinde INSERT izni gerekir.

Açıklamalar

COPY deyimi, satır verileri ve komut parametreleri için yalnızca UTF-8 ve UTF-16 geçerli karakterleri kabul eder. Geçersiz karakterler kullanan kaynak dosyalar veya parametreler (ROW TERMINATOR veya FIELD TERMINATOR gibi) COPY deyimi tarafından yanlış yorumlanabilir ve veri bozulması veya diğer hatalar gibi beklenmeyen sonuçlara neden olabilir. COPY deyimini çağırmadan önce kaynak dosyalarınızın ve parametrelerinizin UTF-8 veya UTF-16 uyumlu olduğundan emin olun.

Örnekler

Microsoft Fabric'teki Ambarınızda COPY INTO kullanma hakkında daha fazla bilgi için bkz.COPY deyimini kullanarak verileri Ambarınıza alma .

A. Genel depolama hesabından yükleme

Aşağıdaki örnek, ortak depolama hesabından veri yükleyen COPY komutunun en basit biçimidir. Bu örnekte COPY deyiminin varsayılanları, satır öğesi csv dosyasının biçimiyle eşleşmektedir.

COPY INTO dbo.[lineitem]
FROM 'https://unsecureaccount.blob.core.windows.net/customerdatasets/folder1/lineitem.csv'

COPY komutunun varsayılan değerleri şunlardır:

  • MAXERRORS = 0

  • SıKıŞTıRMA varsayılanı sıkıştırılmamış

  • FIELDQUOTE = '"'

  • FIELDTERMINATOR = ','

  • ROWTERMINATOR = '\n'

Önemli

COPY, \n dahili olarak \r\n olarak ele alır. Daha fazla bilgi için ROWTERMINATOR bölümüne bakın.

  • FIRSTROW = 1

  • KODLAMA = 'UTF8'

  • FILE_TYPE = 'CSV'

B. Paylaşım Erişim İmzası (SAS) aracılığıyla yük kimlik doğrulaması

Aşağıdaki örnek, unix çıkışı gibi satır sonlandırıcısı olarak satır akışını kullanan dosyaları yükler. Bu örnek, Azure Blob Depolama'da kimlik doğrulaması yapmak için bir SAS anahtarı da kullanır.

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',
    MAXERRORS = 10,
    ERRORFILE = '/errorsfolder'--path starting from the storage container
)

C. Depolama Hesabı Anahtarı (SAK) aracılığıyla kimlik doğrulaması varsayılan değerleri içeren bir sütun listesiyle yükleme

Bu örnek, varsayılan değerlerle bir sütun listesi belirten dosyaları yükler.

--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>'),
    --CREDENTIAL should look something like this:
    --CREDENTIAL=(IDENTITY= 'Storage Account Key', SECRET='x6RWv4It5F2msnjelv3H4DA80n0PQW0daPdw43jM0nyetx4c6CpDkdj3986DX5AHFMIf/YN4y6kkCnU8lb+Wx0Pj+6MDw=='),
    FIELDQUOTE = '"',
    FIELDTERMINATOR=',',
    ROWTERMINATOR='0x0A',
    ENCODING = 'UTF8',
    FIRSTROW = 2
)

D. Parquet Yükle

Bu örnekte, yürüten kullanıcının EntraID değerini kullanarak tüm Parquet dosyalarını bir klasör altına yüklemek için joker karakter kullanılır.

COPY INTO test_parquet
FROM 'https://myaccount.blob.core.windows.net/myblobcontainer/folder1/*.parquet'
WITH (
    FILE_TYPE = 'PARQUET'
)

E. Joker kartları ve birden çok dosyayı belirtmeyi yükleme

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 = '|'
)

SSS

Sıkıştırılmış CSV dosyalarını yüken COPY komutu için dosya bölme kılavuzu nedir?

Özellikle dosya sayısı az olduğunda büyük CSV dosyalarını bölmeyi göz önünde bulundurun, ancak daha iyi performans için dosyaları en az 4 MB'da tutun.

Parquet dosyalarını yüken COPY komutu için dosya bölme kılavuzu nedir?

Özellikle dosya sayısı az olduğunda büyük Parquet dosyalarını bölmeyi göz önünde bulundurun.

Dosyaların sayısı veya boyutuyla ilgili herhangi bir sınırlama var mı?

Dosyaların sayısı veya boyutuyla ilgili herhangi bir sınırlama yoktur; ancak en iyi performans için en az 4 MB olan dosyaları öneririz.

Kimlik bilgisi belirtmediğimde hangi kimlik doğrulama yöntemi kullanılır?

Varsayılan olarak, COPY INTRO yürüten kullanıcının Entra kimliğini kullanır.

  • Microsoft Fabric'da Verileri Ambarınıza alma
  • COPY deyimini kullanarak Verileri Ambarınıza