Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Tip
Microsoft Fabric Data Warehouse geleceğe hazır mimariye, yerleşik yapay zekaya ve yeni özelliklere sahip data lake foundation üzerinde kurumsal ölçekli ilişkisel bir ambardır. Veri ambarı konusunda yeniyseniz Fabric Data Warehouse ile başlayın. Mevcut özel SQL havuzu iş yükleri, veri bilimi, gerçek zamanlı analiz ve raporlama alanlarında yeni özelliklere erişmek için Fabric'e yükseltilebilir.
Bu makalede, dış depolama hesaplarından veri yüklemek için Azure Synapse Analytics'da COPY deyiminin nasıl kullanılacağı açıklanmaktadır. Bu açıklama COPY , Azure Synapse Analytics'e yüksek verimlilikte veri alımı için en fazla esnekliği sağlar.
Note
Microsoft Fabric'deki Ambar için bkz. COPY INTO.
Aşağıdaki yetenekler için kullanım COPY :
- Veri ambarı üzerinde katı CONTROL izinlerine gerek kalmadan verileri 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ütunlar içinde kaçtığı CSV dosyalarını düzgün ayrıştırma ve yükleme.
- Paylaşılan Erişim İmzaları (SAS) kullanarak depolama hesabı anahtarlarını göstermeden daha ince bir izin modeli belirtin.
- Konum için
ERRORFILEfarklı bir depolama hesabı kullanın (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 bir satır sonlayıcı, alan sonlandırıcı ve alan tırnakı belirtin.
- CSV dosyaları için SQL Server Tarih biçimlerini kullanın.
- Depolama konumu yolunda joker karakterler ve birden çok dosya belirtin.
- 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 işlemiyle birlikte çalışır.
- Haritalar ve Listeler gibi Parquet dosyalarından karmaşık veri türlerini, verileri önceden işlemek için başka araçlar kullanmadan doğrudan dize sütunlarına yükleyin.
Note
Parquet dosyalarından karmaşık veri türlerini yüklemek için kullanarak AUTO_CREATE_TABLEotomatik tablo oluşturmayı açın.
deyimini COPY kullanan kapsamlı örnekler ve hızlı başlangıçlar için bkz:
- Hızlı Başlangıç: COPY deyimini kullanarak verileri toplu yükleme
- Hızlı Başlangıç: COPY deyimini ve desteklenen kimlik doğrulama yöntemlerini kullanan örnekler
- Hızlı Başlangıç: Zengin Synapse Studio kullanıcı arabirimini kullanarak COPY deyimini oluşturma
Note
Microsoft Entra ID daha önce Azure Active Directory (Azure AD) olarak biliniyordu.
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
İşlemi gerçekleştiren kullanıcının varsayılan şeması belirtilen tablonun şemasıysa isteğe bağlı. Şema belirtmezseniz ve işlemi gerçekleştiren COPY kullanıcının varsayılan şeması belirtilen tablonun şemasından farklıysa, COPY işlem iptal edilir ve bir hata iletisi döndürülür.
tablo_adı
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.
zaman AUTO_CREATE_TABLE = 'ON' 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 belirtmediğinizde, 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 gider vb.
Dış konumlar
Verileri içeren dosyaların hazırlandığı konum. Ş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
Note
Uç .blob nokta ADLS 2. Nesil için de kullanılabilir ve şu anda en iyi performansı verir.
.blob Kimlik doğrulama yönteminiz için gerekli olmadığında uç noktayı .dfs 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 belirtirseniz,
COPYklasördeki tüm dosyaları ve tüm alt klasörlerini alır.COPYgizli 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.
Şu yollara joker karakterler ekleyebilirsiniz:
- Joker karakter yol adı eşleştirme büyük/küçük harfe duyarlıdır
- Ters eğik çizgi karakterini (
\) kullanarak joker karakterden kaçabilirsiniz - Joker karakter genişletmesi özyinelemeli olarak uygulanır. Örneğin, altındaki
Customer1tüm CSV dosyaları (alt dizinleriCustomer1dahil) aşağıdaki örnekte yüklenir:Account/Container/Customer1/*.csv
Note
En iyi performans için, daha fazla sayıda dosya üzerinde genişleyen joker karakterler belirtmekten kaçının. Mümkünse joker karakter belirtmek yerine birden çok dosya konumunu listeleyin.
Birden çok dosya konumunu yalnızca aynı depolama hesabından ve kapsayıcısından virgülle ayrılmış bir liste aracılığıyla belirtebilirsiniz:
-
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 bir virgülle ayrılmış değerler dosyası belirtir.
- PARQUET: Parquet biçimini belirtir.
- ORC: İyileştirilmiş Satır Sütunlu (ORC) biçimini belirtir.
Note
PolyBase'deki 'Sınırlandırılmış Metin' dosya türü , 'CSV' dosya biçimiyle değiştirilir. Varsayılan virgül sınırlayıcısını FIELDTERMINATOR parametresi aracılığıyla yapılandırabilirsiniz.
FILE_FORMAT = external_file_format_name
FILE_FORMAT yalnızca Parquet ve ORC dosyaları için geçerlidir. 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 | Parquet | ORC | |
|---|---|---|---|
| Azure Blob Depolama |
SAS/MSI/HIZMET SORUMLUSU/ANAHTAR/Entra | SAS/KEY | SAS/KEY |
| Azure Data Lake 2. Nesil |
SAS/MSI/HIZMET SORUMLUSU/ANAHTAR/Entra | SAS (blob 1 )/MSI (dfs 2 )/HİzMET SORUMLUSU/ANAHTAR/Entra | SAS (blob 1 )/MSI (dfs 2 )/HİzMET SORUMLUSU/ANAHTAR/Entra |
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.
Note
- Microsoft Entra ID veya genel depolama hesabı kullanarak kimlik doğrulaması yaparken
CREDENTIALbelirtmeniz 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ı
-
IDENTITY: Değeri olan bir sabitShared Access Signature -
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ı
-
IDENTITY:<ClientID>@<OAuth_2.0_Token_EndPoint> -
SECRET: Microsoft Entra uygulama hizmet sorumlusu 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ı
-
IDENTITY: Değeri olan bir sabitStorage Account Key -
SECRET: Depolama hesabı anahtarı
-
Yönetilen Kimlik (VNet Hizmet Uç Noktaları) ile kimlik doğrulaması
-
IDENTITY: Değeri olan bir sabitManaged Identity
-
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şkilendirilmeyen 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 Access Control Listesi (ACL) izinleri gerektirir. Microsoft Entra kullanıcısıyla kimlik doğrulaması
- KIMLIK BILGISI gerekli değil
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. Reddedilen satırların ve karşılık gelen hata dosyasının yazıldığı deyimi içindeki dizini COPY belirtir. Depolama hesabından tam yolu veya kapsayıcıya göre yolu belirtebilirsiniz. Belirtilen yol yoksa ambar bir yol oluşturur. adlı _rejectedrowsbir alt dizin oluşturulur. karakteri, _ konum parametresinde açıkça adlandırılmadığı sürece dizinin diğer veri işleme için kaçış olmasını sağlar.
Note
öğesine ERRORFILEgöreli bir yol geçirdiğinizde, bunu external_location belirttiğiniz kapsayıcı yoluna göre yapın.
Bu dizinde, ambar biçimindeki YearMonthDay -HourMinuteSecond yük gönderme zamanına göre bir klasör oluşturur (örneğin, 20180330-173205). Bu klasörde, işlem iki tür dosya yazar: neden (hata) dosyası ve veri (satır) dosyası. Her dosya, , distributionIDve bir dosya GUID'sinin queryIDbaşına ekler. Veriler ve nedeni ayrı dosyalarda olduğundan, ilgili dosyaların eşleşen bir ön eki vardır.
Depolama hesabının tam yolu tanımlanmışsa ERRORFILE , COPY bu depolamaya bağlanmak için kullanır ERRORFILE_CREDENTIAL . Aksi takdirde, için CREDENTIALbelirttiğiniz değeri kullanır. Kaynak veriler ve ERRORFILEiçin aynı kimlik bilgilerini kullandığınızda, için geçerli ERRORFILE_CREDENTIAL 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, hizmet sorumlusu veya Microsoft Entra
Azure Data Lake 2. Nesil: SAS, MSI, hizmet sorumlusu veya Microsoft Entra
Paylaşılan Erişim İmzalarıyla (SAS) Kimlik Doğrulaması
-
IDENTITY: Değeri olan bir sabitShared Access Signature -
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ı
-
IDENTITY:<ClientID>@<OAuth_2.0_Token_EndPoint> -
SECRET: Microsoft Entra uygulama hizmet sorumlusu anahtarı
-
Gereken en düşük RBAC rolleri: Depolama blob verileri katkıda bulunanı veya Depolama blobu veri sahibi
Note
V1
Yönetilen Kimlik (VNet Hizmet Uç Noktaları) ile kimlik doğrulaması
-
IDENTITY: Değeri olan bir sabitManaged Identity
-
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ı
-
CREDENTIALgerekli değil
-
Gereken en düşük RBAC rolleri: Microsoft Entra kullanıcısı için depolama blob verileri katkıda bulunanı veya Depolama blobu veri sahibi
ile ERRORFILE_CREDENTIAL depolama hesabı anahtarı kullanılması desteklenmez.
Note
Hata dosyanız için aynı depolama hesabını kullanır ve kapsayıcının ERRORFILE köküne göre yolu belirtirseniz, değerini belirtmeniz ERROR_CREDENTIALgerekmez.
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. En fazla hata sayısı için bir değer belirtmezseniz, varsayılan değer olur 0.
MAXERRORS ile AUTO_CREATE_TABLEkullanılamaz.
olduğundaFILE_TYPE, veri türü dönüştürme hatalarından kaynaklanan özel durumlar (örneğin, Parquet ikiliden SQL tamsayısına) yine de yok sayılarak başarısız olmaya devam eder COPY INTOMAXERRORS.PARQUET
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 parametreyi belirtmediğinizde dosya uzantısına göre sıkıştırma türünü otomatik olarak algılar:
-
.gz- GZİP -
.snappy- Çabuk -
.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 başarıyla çalıştığından emin olmak 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. Bu değeri belirtmezseniz, RFC 4180 standardında tanımlandığı gibi tırnak karakteri (") kullanılır. onaltılık gösterimi de için FIELDQUOTEdesteklenir. genişletilmiş ASCII ve çok baytlı karakterler için FIELDQUOTEUTF-8 ile desteklenmez.
Note
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ını onaltılık gösterimi kullanarak belirtebilirsiniz. Alan sonlandırıcısı çok karakterli olabilir. Varsayılan alan sonlandırıcısı bir (,). genişletilmiş ASCII ve çok baytlı karakterler için FIELDTERMINATORUTF-8 ile 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. Onaltılık gösterimi kullanarak satır sonlandırıcısını belirtebilirsiniz. Satır sonlandırıcısı çok karakterli olabilir. Varsayılan olarak, satır sonlandırıcısı \r\n.
COPY komutu, \rile sonuçlanacak \n (yeni satır) belirtirken \r\n 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 belirtmeyin 0x .
genişletilmiş ASCII ve çok baytlı karakterler için ROWTERMINATORUTF-8 ile 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 değerinden 1başlar. değerini 2olarak ayarlarsanız, veriler yüklendiğinde her dosyadaki ilk satır (üst bilgi 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ış
KODLAMA = 'UTF8' | 'UTF16'
ENCODING 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' | 'KAPALI'
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. (varsayılan) ise IDENTITY_INSERTOFF , bu sütunun kimlik değerleri doğrulanır, ancak içeri aktarılmaz. COPY komutuyla aşağıdaki davranışa dikkat edin:
- OFF
IDENTITY_INSERTise ve tabloda bir kimlik sütunu varsa- Giriş alanını kimlik sütunuyla eşlemeyen bir sütun listesi belirtmelisiniz.
- AÇıKsa ve tabloda bir kimlik sütunu varsa
IDENTITY_INSERT- Sütun listesini geçirirseniz, bir giriş alanını kimlik sütununa eşlemesi gerekir.
- Varsayılan değer, sütun listesindeki IDENTITY sütunu için desteklenmez.
- Aynı anda yalnızca bir tablo için ayarlayabilirsiniz
IDENTITY_INSERT.
Azure Synapse Analytics, tablo oluşturma sırasında belirtilen tohum ve artım değerlerine göre otomatik olarak benzersiz değerler atar.
AUTO_CREATE_TABLE = { 'ON' | 'OFF' }
AUTO_CREATE_TABLE , otomatik şema bulma ile birlikte çalışarak tablonun otomatik olarak oluşturulup oluşturulamadığını belirtir. AUTO_CREATE_TABLE yalnızca Azure Synapse Analytics'daki Parquet dosyaları için kullanılabilir.
- ON: Otomatik tablo oluşturmayı etkinleştirir. İşlem
COPY INTO, yüklenecek dosyanın yapısını bularak otomatik olarak yeni bir tablo oluşturur. Parquet dosyalarının otomatik şema keşfinden yararlanmak için bunu önceden var olan tablolarla da kullanabilirsiniz. - KAPALI: Otomatik tablo oluşturma etkin değil. Default.
Note
Otomatik tablo oluşturma, otomatik şema bulma ile birlikte çalışır. Otomatik tablo oluşturma varsayılan olarak etkin değildir.
Permissions
COPY komutunu çalıştıran 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];
Remarks
Bu COPY ifade, satır verileri ve komut parametreleri için yalnızca UTF-8 ve UTF-16 geçerli karakterleri kabul eder. Deyimi, COPY geçersiz karakterler kullanan ve veri bozulması veya diğer hatalar gibi beklenmeyen sonuçlara neden olan kaynak dosyaları veya parametreleri (veya ROWTERMINATORFIELDTERMINATORgibi) yanlış yorumlayabilir. Kaynak dosyalarınızın ve parametrelerinizin UTF-8 veya UTF-16 uyumlu olduğundan emin olun, ifadeyi COPY çağırmadan önce.
Sorgu MAXDOP ipucu ile COPY INTOdesteklenmez.
Güvenilir yürütmeyi sağlamak için işlem sırasında kaynak dosya ve klasörleri değiştirmeyin COPY INTO .
- Komut çalışırken başvuruda bulunan dosya veya klasörlerin değiştirilmesi, silinmesi veya değiştirilmesi işlemin başarısız olmasına veya tutarsız veri alımına neden olabilir.
- yürütmeden
COPY INTOönce tüm kaynak verilerin kararlı olduğunu ve işlem sırasında değiştirilmeydüğünü doğrulayın.
Kaynak verilerin duyarlılığı hedef sütun tanımından daha büyükse, sayısal, tarih ve saat türleri için değer yuvarlanmamış olarak kesilir.
Examples
A. Genel depolama hesabından yükleme
Aşağıdaki örnekte, genel depolama hesabından veri yükleyen komutun COPY en basit biçimi gösterilmektedir. Bu örnekte deyiminin COPY varsayılan değerleri, 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 TARİhİFORMATİMAXERRORS= 0COMPRESSIONvarsayılan sıkıştırılmamıştırFIELDQUOTE= '"'FIELDTERMINATOR= ','ROWTERMINATOR= '\n'
Important
COPY Dahili \n olarak \r\n muamele eder. Daha fazla bilgi için bölümüne bakın ROWTERMINATOR .
FIRSTROW= 1ENCODING= '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>'),
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'
)
FAQ
COPY komutunun performansı PolyBase ile karşılaştırıldığında nasıldır?
COPY komutunun performansı, iş yükünüze bağlı olarak daha iyi olabilir.
Ambar, sıkıştırılmış dosyaları otomatik olarak bölemez. 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.
Ambar, paralel yükleme için büyük sıkıştırılmamış CSV dosyalarını otomatik olarak bölebilir, bu nedenle genellikle 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?
Aşağıdaki tabloda kullanmanız gereken dosya sayısı özetlenmiştir. Önerilen dosya sayısına ulaştığınızda, daha büyük dosyalarla daha iyi performans elde edersiniz. Dosya sayısı, 60 ile çarpılan işlem düğümü sayısına göre belirlenir. Örneğin, 6000 DWU'da 12 işlem düğümüne sahip olduğunuz için 12 * 60 = 720 bölüme sahip olursunuz. Basit bir dosya bölme deneyimi için bkz. Dosya bölmeleriyle COPY yük aktarım hızını en üst düzeye çıkarma.
| DWU | Dosya sayısı |
|---|---|
| 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ölmeniz gerekmez. 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ı kullanın. Ayrıca, daha iyi performans için kaynak dosya sayısını en fazla 5.000 dosyayla sınırlayın.
COPY deyimiyle ilgili bilinen sorunlar var mı?
7 Aralık 2020'den önce oluşturduğunuz 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 isn't enabled on this server. Please enable Managed Service Identity and try again.
Bu sorunu geçici olarak çözmek için çalışma alanının yönetilen kimliğini yeniden kaydedin:
- Azure PowerShell'i yükleyin. Bkz. PowerShell'i yükleme.
- 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
İlgili içerik
- Azure Synapse Analytics ile yüklemeye genel bakış
Bu makalede, dış depolama hesaplarından yüklemek için Microsoft Fabric'daki Warehouse'da COPY deyiminin nasıl kullanılacağı açıklanmaktadır.
Fabric Data Warehouse'da COPY deyimi şu anda CSV, JSONL ve PARQUET dosya biçimlerini destekler. Veri kaynakları için Azure Data Lake Storage 2. Nesil hesapları ve OneLake kaynakları desteklenir.
Microsoft Fabric'teki Ambarınızı kullanma COPY INTO hakkında daha fazla bilgi için copy deyimini kullanarak Microsoft Fabric'teki Ambarınıza veri alma bölümüne bakın.
Varsayılan olarak, COPY INTO yürüten Microsoft Entra ID kullanıcı olarak kimlik doğrulaması yapar.
Aşağıdaki yetenekler için kullanım COPY :
- Ambarda katı CONTROL izinlerine gerek kalmadan verileri 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.
- Her satırın geçerli bir JSON nesnesi olduğu ve alanların JSON yol ifadeleri kullanılarak eşlendiği JSONL dosyalarını düzgün ayrıştırıp yükleyin.
- Paylaşılan Erişim İmzaları (SAS) kullanarak depolama hesabı anahtarlarını göstermeden daha ince bir izin modeli belirtin.
- Konum için
ERRORFILEfarklı bir depolama hesabı kullanın (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 bir satır sonlayıcı, alan sonlandırıcı ve alan tırnakı belirtin.
- 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 copy deyimini kullanarak Microsoft Fabric'teki Ambarınıza veri alma bölümüne bakın.
Syntax
COPY INTO [ warehouse_name. ] [ schema_name. ] table_name
[ (Column_list) ]
FROM '<external_location>' [ , ...n ]
WITH
(
[ FILE_TYPE = { 'CSV' | 'JSONL' | 'PARQUET' } ]
[ , CREDENTIAL = (AZURE CREDENTIAL) ]
[ , ERRORFILE = ' [ http(s)://storageaccount/container ] /errorfile_directory [ / ] ] '
[ , ERRORFILE_CREDENTIAL = (AZURE CREDENTIAL) ]
[ , MAXERRORS = max_errors ]
[ , COMPRESSION = { 'Gzip' | 'Snappy' } ]
[ , FIELDQUOTE = 'string_delimiter' ]
[ , FIELDTERMINATOR = 'field_terminator' ]
[ , ROWTERMINATOR = 'row_terminator' ]
[ , FIRSTROW = first_row ]
[ , DATEFORMAT = 'date_format' ]
[ , ENCODING = { 'UTF8' | 'UTF16' } ]
[ , PARSER_VERSION = { '1.0' | '2.0' } ]
[ , MATCH_COLUMN_COUNT = { 'ON' | 'OFF' } ]
)
Arguments
warehouse_name
İşlemi gerçekleştiren kullanıcının geçerli ambarı belirtilen tablonun ambarıysa isteğe bağlıdır.
Ambar belirtmezseniz ve belirtilen şema ve tablo geçerli ambarda yoksa başarısız COPY 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 belirtmezseniz ve işlemi gerçekleştiren COPY kullanıcının varsayılan şeması belirtilen tablonun şemasından farklıysa iptal COPY edilir ve bir hata iletisi döndürülür.
tablo_adı
Veri için tablonun COPY adı. Hedef tablo ambarda zaten mevcut olmalıdır.
(column_list)
Veri yükü sırasında kaynak veri alanlarını hedef tablo sütunlarına eşlemek için kullanılan isteğe bağlı bir sütun listesi.
column_list ayraç içine alınmalı ve virgülle sınırlandırılmalıdır. Sözdizimi şöyledir:
[(Column_name [varsayılan Default_value] [Field_number | JSON_path] [,... n])]
- Column_name - Hedef tablodaki sütunun adı.
-
Default_value - giriş dosyasındaki herhangi
NULLbir değeri değiştiren varsayılan değer. Varsayılan değer tüm dosya biçimleri için geçerlidir.COPYbir sütun sütun listesinden çıkarıldığında veya boş bir giriş dosyası alanı olduğunda giriş dosyasından yüklenmeyeNULLçalışır. Varsayılan değerin önüne 'default' anahtar sözcüğü eklenir - Field_number - Yalnızca CSV dosyaları için geçerlidir. Giriş verilerinde alanın sıralı konumunu belirtir. Alan dizin oluşturma 1'de başlar.
-
JSON_path - Yalnızca JSONL dosyaları için geçerlidir. Her JSON nesnesinden ayıklanan alanı tanımlayan bir JSON yol ifadesi belirtir (örneğin,
$.CustomerName).
column_list belirtmediğinizde, COPY sütunları kaynak ve hedef sıraya göre eşler: Giriş alanı 1 hedef sütun 1'e, 2. alan 2. sütuna gider vb.
Note
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 belirtmediğinizde, 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 gider vb.
Dış konum
Verileri içeren dosyaların nerede hazırlandığı belirtir. Şu anda Azure Data Lake Storage (ADLS) 2. Nesil, Azure Blob Depolama ve OneLake desteklenmektedir:
- Blob Depolama için dış konum
: - ADLS 2. Nesil:
için dış konum - OneLake için dış konum:
https://onelake.dfs.fabric.microsoft.com/<workspaceId>/<lakehouseId>/Files/
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.
Note
Uç .blob nokta ADLS 2. Nesil için de kullanılabilir ve şu anda en iyi performansı verir.
blob Kimlik doğrulama yönteminiz için gerekli olmadığında uç noktayı dfs 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 belirtirseniz,
COPYklasördeki tüm dosyaları ve tüm alt klasörlerini alır.COPYgizli 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,
- Joker karakter yol adı eşleştirme büyük/küçük harfe duyarlıdır
- Ters eğik çizgi karakterini (
\) kullanarak joker karakterden kaçabilirsiniz
Note
En iyi performans için, daha fazla sayıda dosya üzerinde genişleyen joker karakterler belirtmekten kaçının. Mümkünse joker karakter belirtmek yerine birden çok dosya konumunu listeleyin.
Birden çok dosya konumunu yalnızca aynı depolama hesabından ve kapsayıcısından virgülle ayrılmış bir liste aracılığıyla belirtebilirsiniz:
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'leri aracılığıyla temel dosyalara erişimi olmalıdır. - Ambarı barındıran Doku çalışma alanınız
kaynak ö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' | 'JSONL' | 'PARQUET' }
FILE_TYPE dış verilerin biçimini belirtir.
- CSV: RFC 4180 standardıyla uyumlu bir virgülle ayrılmış değerler dosyası belirtir.
- JSONL: Her satırın geçerli bir JSON nesnesi olduğu, yeni satırla sınırlandırılmış bir JSON (JSON Satırları) dosyası belirtir.
- PARQUET: Parquet biçimini belirtir.
CREDENTIAL (IDENTITY = '', SECRET = '')
CREDENTIAL Dış depolama hesabına erişmek için kimlik doğrulama mekanizmasını belirtir.
Doku Veri Ambarı'nda:
-
COPY INTOgenel erişimin devre dışı bırakıldığı durumlarda desteklenmez. - Genel depolama hesapları için desteklenen kimlik doğrulama mekanizmaları Microsoft Entra Id, Paylaşılan Erişim İmzası (SAS) veya Depolama Hesabı Anahtarı'dır (SAK).
- Güvenlik duvarının arkasındaki genel depolama hesapları için desteklenen tek kimlik doğrulama yöntemi Microsoft Entra Id kimlik doğrulamasıdır.
COPY INTOOneLake'i kaynak olarak kullanmak yalnızca EntraID kimlik doğrulamasını destekler.
Kullanıcının Microsoft Entra ID kimlik doğrulaması varsayılandır. Kimlik bilgisi belirtilmesi gerekmez.
- Paylaşılan Erişim İmzası (SAS) ile kimlik doğrulaması
-
IDENTITY: değeriShared Access Signatureolan bir sabit. -
SECRET: Paylaşılan erişim imzası , depolama hesabınızdaki kaynaklara temsilci erişimi sağlar. - Gerekli minimum izinler: READ ve LIST.
-
- Depolama Hesabı Anahtarı ile kimlik doğrulaması
-
IDENTITY: değeriStorage Account Keyolan bir sabit. -
SECRET: Depolama hesabı anahtarı.
-
ERRORFILE = Dizin Konumu
ERRORFILE CSV ve JSONL için geçerlidir. Reddedilen satırların ve ilgili hata dosyasının yazılacağı dizini belirtir. Depolama hesabından tam yolu veya kapsayıcıya göre yolu belirtebilirsiniz. Belirtilen yol yoksa sistem sizin adınıza bir yol oluşturur. adlı _rejectedrowsbir alt dizin oluşturulur. karakteri, _ konum parametresinde açıkça adlandırılmadığı sürece dizinin diğer veri işleme için kaçış olmasını sağlar.
Note
öğesine ERRORFILEgöreli bir yol geçirdiğinizde, bunu external_location belirttiğiniz kapsayıcı yoluna göre yapın.
Bu dizinde, ambar biçimindeki YearMonthDay -HourMinuteSecond yük gönderme zamanına göre bir klasör oluşturur (örneğin, 20180330-173205). Bu klasörde, ambar deyim kimliğine sahip bir klasör oluşturur ve bu klasörün altında iki tür dosya yazılır: hata. Reddetme nedenlerini içeren Json dosyası ve reddedilen satırları içeren bir row.csv dosyası.
Depolama hesabının tam yolu tanımlanmışsa ERRORFILE , ERRORFILE_CREDENTIAL bu depolamaya bağlanmak için kullanılır. Aksi takdirde, için CREDENTIAL belirtilen değer kullanılır. için kaynak veriler için kullanılan kimlik bilgileri kullanıldığında ERRORFILE, için geçerli ERRORFILE_CREDENTIAL olan kısıtlamalar da geçerlidir.
Güvenlik duvarı korumalı Bir Azure Depolama Hesabı kullanılırken, hata dosyası depolama hesabı yolunda belirtilen kapsayıcıda oluşturulur. Bu senaryoda seçeneğini ERRORFILE kullanmayı düşünürken parametresini MAXERROR belirtmek de gerekir. Depolama hesabının tam yolu tanımlanmışsa ERRORFILE , ERRORFILE_CREDENTIAL bu depolamaya bağlanmak için kullanılır. Aksi takdirde, için CREDENTIAL belirtilen değer kullanılır.
ERRORFILE_CREDENTIAL = (IDENTITY = '', SECRET = '')
ERRORFILE_CREDENTIAL CSV ve JSONL 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ı
-
IDENTITY: Değeri olan bir sabitShared Access Signature -
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
Note
Hata dosyanız için aynı depolama hesabını kullanır ve kapsayıcının ERRORFILE köküne göre yolu belirtirseniz, değerini belirtmeniz ERROR_CREDENTIALgerekmez.
MAXERRORS = max_errors
MAXERRORS CSV ve JSONL için geçerlidir. İşlem başarısız olmadan önce COPY yükte izin verilen en fazla reddetme satırı sayısını belirtir. İşlemin COPY içe aktaramadığı her satır göz ardı edilir ve bir hata olarak sayılır. En fazla hata sayısı belirtmezseniz varsayılan değer olur 0.
Fabric Data Warehouse'da FILE_TYPEPARQUET olduğunda MAXERRORS kullanamazsınız.
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.
- JSONL için desteklenmez
Bu parametre belirtilmediğinde dosya COPY uzantısı temelinde sıkıştırma türünü otomatik olarak algılar:
-
.gz- GZİP
Sıkıştırılmış dosyaların yüklenmesi şu anda yalnızca ayrıştırıcı sürüm 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 sapmalar komutun COPY başarısızlığına neden olur. Başarılı bir şekilde çalıştığından emin COPY olmak 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. belirtmezseniz FIELDQUOTE, teklif karakteri (") RFC 4180 standardında tanımlandığı gibi tırnak karakteri olarak kullanılır. onaltılık gösterimi de için FIELDQUOTEdesteklenir. genişletilmiş ASCII ve çok baytlı karakterler için FIELDQUOTEUTF-8 ile desteklenmez.
Note
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ını onaltılık gösterimi kullanarak da belirtebilirsiniz. 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ını onaltılık gösterimi kullanarak belirtebilirsiniz. Satır sonlandırıcısı çok karakterli olabilir. Varsayılan sonlandırıcılar \r\n, \nve \r'dır.
Komut, COPY (newline) belirttiğinde \r karakterin \n önekini yapar ve bu da 'yi oluşturur\r\n. 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.
genişletilmiş ASCII ve çok baytlı karakterler için ROWTERMINATORUTF-8 ile desteklenmez.
FIRSTROW = First_row_int
FIRSTROW yalnızca CSV için geçerlidir. Komutun COPY tüm dosyalarında ilk okunan satır numarasını belirtir. Değerler, varsayılan değer olan değerinden 1başlar. değerini 2olarak ayarlarsanız, veriler yüklendiğinde her dosyadaki ilk satır (üst bilgi 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, CSV ve JSONL için geçerlidir. SQL Server tarih biçimleriyle 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). Komut içindeki DATEFORMAT, COPYoturum seviyesinde yapılandırılan DATEFORMAT'a göre önceliklidir.
KODLAMA = 'UTF8' | 'UTF16'
ENCODING CSV ve JSONL için geçerlidir. Varsayılan değer UTF8'dir. Komutla COPY yüklenen dosyalar için veri kodlama standardını belirler.
PARSER_VERSION = { '1.0' | '2.0' }
PARSER_VERSION yalnızca CSV dosyaları için geçerlidir. Varsayılan değer 2,0'dır.
PARSER_VERSION 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,FIELDTERMINATORveyaFIELDQUOTEdesteklenmez. Ancak,\r\nvarsayılanROWTERMINATORolarak kabul edilir.
UTF-8 dosyalarıyla ayrıştırıcı sürüm 1.0 kullandığınızda, için çok baytlı ve çok karakterli sonlandırıcılar desteklenmez FIELDTERMINATOR.
Ayrıştırıcı sürüm 1.0 yalnızca geriye dönük uyumluluk için kullanılabilir. Yalnızca bu sınırlamalarla karşılaştığınızda kullanın.
Note
Sıkıştırılmış CSV dosyalarıyla veya UTF-16 kodlamalı dosyalarla kullandığınızda COPY INTO , COPY INTO kullanıcı eylemi gerekmeden otomatik olarak 1.0'a PARSER_VERSION geçer. veya ROWTERMINATORCOPY INTO üzerindeki FIELDTERMINATOR çok karakterli sonlandırıcılar için deyimi başarısız olur. Çok karakterli ayırıcılara ihtiyacınız varsa kullanın PARSER_VERSION = '1.0' .
MATCH_COLUMN_COUNT = { 'AÇIQ' | 'KAPALI' }
MATCH_COLUMN_COUNT yalnızca CSV dosyaları için geçerlidir. Varsayılan değer OFF değeridir. Komutun COPY kaynak dosyalardaki sütun sayısı satırlarının hedef tablonun sütun sayısıyla eşleşip eşleşmediğini denetlemesi gerekip gerekmediğini belirtir. Aşağıdaki davranış geçerlidir:
- ise
MATCH_COLUMN_COUNTOFF:- komutu, kaynak satırlardaki sütunların aşılması işlemini yoksayar.
- komutu, daha az sütun içeren satırlar için null atanabilir sütunlara değer ekler
NULL.
- komutu, daha az sütun içeren satırlar için null atanabilir sütunlara değer ekler
- Null değer atanamayan bir sütuna değer sağlanmamışsa,
COPYkomut başarısız olur.
- komutu, kaynak satırlardaki sütunların aşılması işlemini yoksayar.
- ise
MATCH_COLUMN_COUNTON:- Komut,
COPYkaynaktan gelen her dosyadaki her satırdaki sütun sayısının hedef tablonun sütun sayısıyla eşleşip eşleşmediğini kontrol eder.
- Komut,
- Sütun sayısı uyuşmazlığı
COPYvarsa komut başarısız olur.
Note
MATCH_COLUMN_COUNT uygulamasından MAXERRORSbağımsız olarak çalışır. Sütun sayısı uyuşmazlığı, ne olursa olsun MAXERRORSbaşarısız olmasına neden olurCOPY INTO.
OneLake ile COPY INTO kullanma
COPY INTO kullanarak verileri doğrudan Fabric OneLake'de depolanan dosyalardan mevcut öğelerin altında yükleyin. Bu yöntem, ADLS 2. Nesil veya Blob Depolama gibi dış hazırlama hesapları gereksinimini ortadan kaldırır ve Fabric izinlerini kullanarak çalışma alanı tarafından yönetilen, SaaS yerel alımını etkinleştirir. Bu işlev şu özellikleri destekler:
- Çalışma Alanı ve Öğe içindeki herhangi bir konumdan okuma
- Aynı kiracı içinde çalışma alanından ambara yükler
- Microsoft Entra ID kullanarak yerel kimlik zorlama
Example:
COPY INTO t1
FROM 'https://onelake.dfs.fabric.microsoft.com/<workspaceId>/<lakehouseId>/Files/*.csv'
WITH (
FILE_TYPE = 'CSV',
FIRSTROW = 2
);
Permissions
Denetim düzlemi izinleri
Komutu yürütmek COPY INTO için, çalışma alanı rolüne en azından Görüntüleyici rolüyle Çalışma Alanında erişimi yönet aracılığıyla üyelik verilmelidir. Alternatif olarak, Fabric portalında Item İzinleri aracılığıyla en azından Okuma izinleriyle bir kullanıcıyla ambar erişimini paylaşabilirsiniz. En az ayrıcalık ilkesiyle uyumlu hale getirmek için Okuma izni yeterlidir.
Veri düzlemi izinleri
Çalışma alanı rolleri veya öğe izinleri aracılığıyla denetim düzlemi izinleri verdikten sonra, kullanıcının yalnızca veri düzlemi düzeyinde Okuma izinleri varsa, T-SQL komutlarını kullanarak kullanıcıya INSERT ve ADMINISTER DATABASE BULK OPERATIONS izinlere de izin verin.
Örneğin, aşağıdaki T-SQL betiği Microsoft Entra ID kullanarak tek bir kullanıcıya bu izinleri verir.
GRANT ADMINISTER DATABASE BULK OPERATIONS to [mike@contoso.com];
GO
GRANT INSERT to [mike@contoso.com];
GO
Hata dosyası seçeneğini kullandığınızda, kullanıcının Depolama Hesabı kapsayıcısı üzerinde en az Blob Depolama Katkıda Bulunan iznine sahip olması gerekir.
Kaynak olarak OneLake kullandığınızda, kullanıcının hem kaynak çalışma alanında (Lakehouse'un bulunduğu yerde) hem de hedef çalışma alanında (Ambarın bulunduğu yerde) Katkıda Bulunan veya daha yüksek izinlere sahip olması gerekir. tüm erişimi Microsoft Entra ID ve Fabric çalışma alanı rolleri yönetir.
Remarks
Bu COPY ifade, satır verileri ve komut parametreleri için yalnızca UTF-8 ve UTF-16 geçerli karakterleri kabul eder. Geçersiz karakterler içeren kaynak dosyaları veya parametreleri (veya FIELDTERMINATORgibiROWTERMINATOR) kullanırsanız, COPY deyimi bunları yanlış yorumlayabilir ve veri bozulması veya diğer hatalar gibi beklenmeyen sonuçlara neden olabilir. deyimini çağırmadan önce kaynak dosyalarınızın COPY ve parametrelerinizin UTF-8 veya UTF-16 uyumlu olduğundan emin olun.
deyimi, COPY INTO tek tek varchar(max) ve varbinary(max) sütunlarının boyutuna ve alabildiğiniz toplam satır boyutuna yönelik kısıtlamalara sahiptir.
- Parquet: maksimum varchar(max)/varbinary(max) sütun boyutu 16 MB, maksimum satır boyutu 1 GB.
- CSV ve JSONL: maksimum varchar(max)/varbinary(max) sütun boyutu 1 MB, maksimum satır boyutu 16 MB.
Güvenilir yürütmeyi sağlamak için işlem sırasında kaynak dosya ve klasörleri değiştirmeyin COPY INTO .
- Komut çalışırken başvuruda bulunan dosya veya klasörlerin değiştirilmesi, silinmesi veya değiştirilmesi işlemin başarısız olmasına veya tutarsız veri alımına neden olabilir.
- yürütmeden
COPY INTOönce tüm kaynak verilerin kararlı olduğunu ve işlem sırasında değiştirilmediğini doğrulayın.
Kaynak verilerin duyarlılığı hedef sütun tanımından daha büyükse, sayısal, tarih ve saat türleri için değer yuvarlanmamış olarak kesilir.
Kaynak olarak OneLake sınırlamaları
Yalnızca Microsoft Entra Id kimlik doğrulaması desteklenir. SAS belirteçleri, paylaşılan anahtarlar veya bağlantı dizeleri gibi diğer kimlik doğrulama yöntemlerine izin verilmez.
Ambar öğeleri kaynak konum olarak desteklenmez. Dosyalar, OneLake depolama aracılığıyla dosyaları kullanıma sunan diğer Doku öğelerinden kaynaklanmalıdır.
OneLake yolları çalışma alanı ve ambar kimliklerini kullanmalıdır. Çalışma alanları veya Lakehouse'lar için kolay adlar şu anda desteklenmemektedir.
Her iki çalışma alanında da katkıda bulunan izinleri gereklidir. Yürüten kullanıcının kaynak Lakehouse çalışma alanında ve hedef Ambar çalışma alanında en az Katkıda Bulunan rolüne sahip olması gerekir.
Examples
Microsoft Fabric'teki Ambarınızı kullanma COPY INTO hakkında daha fazla bilgi için copy deyimini kullanarak Microsoft Fabric'teki Ambarınıza veri alma bölümüne bakın.
A. Genel depolama hesabından yükleme
Aşağıdaki örnekte, genel depolama hesabından veri yükleyen komutun COPY en basit biçimi gösterilmektedir. Bu örnekte deyiminin COPY varsayılan değerleri, 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'
Komutun COPY varsayılan değerleri şunlardır:
MAXERRORS = 0COMPRESSION(varsayılan sıkıştırılmamıştır)FIELDQUOTE = '"'FIELDTERMINATOR = ','ROWTERMINATOR = '\n'Important
COPYDahili\nolarak\r\nmuamele eder. Daha fazla bilgi için bölümüne bakınROWTERMINATOR.FIRSTROW = 1ENCODING = '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>'),
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>'),
FIELDQUOTE = '"',
FIELDTERMINATOR=',',
ROWTERMINATOR='0x0A',
ENCODING = 'UTF8',
FIRSTROW = 2
)
D. Parquet Yükle
Bu örnekte, yürüten kullanıcının Entra ID 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. JSONL yükleme
Bu örnekte, yürüten kullanıcının Entra ID kullanarak bir klasör altındaki tüm JSONL dosyalarını yüklemek için joker karakter kullanılır.
COPY INTO test_jsonl
FROM 'https://myaccount.blob.core.windows.net/myblobcontainer/folder1/*.jsonl'
WITH (
FILE_TYPE = 'JSONL'
)
F. JSONL belgelerinde sütun adlarını alan yollarıyla eşleme
Aşağıdaki örnekte, her satırın tek bir JSON nesnesini temsil ettiği bir JSON Satırları (JSONL) dosyası gösterilmektedir:
{"CountryKey": 0, "CountryName": "ALGERIA", "RegionID": 0, "Population": 34800000}
{"CountryKey": 1, "CountryName": "ARGENTINA", "RegionID": 1, "Population": 46044703}
{"CountryKey": 2, "CountryName": "BRAZIL", "RegionID": 1, "Population": 203080756}
içinde COPY INTO, JSON yol ifadelerini kullanarak tablo sütunlarını belirli JSON alanlarına eşleyebilirsiniz. Bu eşleme, kaynak verilerden yalnızca gerekli alanları almanızı sağlar.
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. Joker karakterler ve birden çok dosya belirterek veri 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 = '|'
)
H. OneLake'den veri yükleme
COPY INTO t1
FROM 'https://onelake.dfs.fabric.microsoft.com/<workspaceId>/<lakehouseId>/Files/*.csv'
WITH (
FILE_TYPE = 'CSV',
FIRSTROW = 2
);