COPY (Transact-SQL)

Berlaku untuk: Azure Synapse Analytics

Artikel ini menjelaskan cara menggunakan pernyataan COPY di Azure Synapse Analytics untuk memuat dari akun penyimpanan eksternal. Pernyataan COPY memberikan fleksibilitas terbanyak untuk penyerapan data throughput tinggi ke Azure Synapse Analytics. Gunakan COPY untuk kapabilitas berikut:

  • Gunakan pengguna dengan hak istimewa yang lebih rendah untuk memuat tanpa memerlukan izin CONTROL yang ketat pada gudang data
  • Jalankan satu pernyataan T-SQL tanpa harus membuat objek database tambahan
  • Mengurai dan memuat file CSV dengan benar di mana pembatas (string, bidang, baris)diloloskan dalam kolom yang dibatasi string
  • Tentukan model izin yang lebih halus tanpa mengekspos kunci akun penyimpanan menggunakan Share Access Signatures (SAS)
  • Gunakan akun penyimpanan yang berbeda untuk lokasi ERRORFILE (REJECTED_ROW_LOCATION)
  • Menyesuaikan nilai default untuk setiap kolom target dan menentukan bidang data sumber untuk dimuat ke kolom target tertentu
  • Menentukan terminator baris kustom untuk file CSV
  • Memanfaatkan format Tanggal SQL Server untuk file CSV
  • Menentukan kartubebas dan beberapa file di jalur lokasi penyimpanan
  • Penemuan skema otomatis menyederhanakan proses penentuan dan pemetaan data sumber ke dalam tabel target
  • Proses pembuatan tabel otomatis secara otomatis membuat tabel dan bekerja bersama dengan penemuan skema otomatis

Kunjungi dokumentasi berikut untuk contoh komprehensif dan mulai cepat menggunakan pernyataan COPY:

Sintaks

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

Argumen

nama_skema

Bersifat opsional jika skema default untuk pengguna yang melakukan operasi adalah skema tabel yang ditentukan. Jika skema tidak ditentukan, dan skema default pengguna yang melakukan operasi COPY berbeda dari tabel yang ditentukan, COPY akan dibatalkan, dan pesan kesalahan akan dikembalikan.

table_name

Adalah nama tabel untuk menyalin data ke dalamnya. Tabel target bisa berupa tabel sementara atau permanen dan harus sudah ada dalam database. Untuk mode deteksi skema otomatis, jangan sediakan daftar kolom.

(column_list)

Adalah daftar opsional dari satu atau beberapa kolom yang digunakan untuk memetakan bidang data sumber ke kolom tabel target untuk memuat data.

Jangan tentukan column_list ketika AUTO_CREATE_TABLE = 'ON'.

column_list harus diapit tanda kurung dan dibatasi oleh koma. Daftar kolom memiliki format berikut:

[(Column_name [Default_value default] [Field_number] [,... n])]

  • Column_name - nama kolom dalam tabel target.
  • Default_value - nilai default yang akan menggantikan nilai NULL apa pun dalam file input. Nilai default berlaku untuk semua format file. COPY akan mencoba memuat NULL dari file input ketika kolom dihilangkan dari daftar kolom atau ketika ada bidang file input kosong. Nilai default didahului oleh kata kunci 'default'
  • Field_number - nomor bidang file input yang akan dipetakan ke nama kolom target.
  • Pengindeksan bidang dimulai pada 1.

Saat daftar kolom tidak ditentukan, COPY akan memetakan kolom berdasarkan ordinalitas sumber dan target: Bidang input 1 akan masuk ke kolom target 1, bidang 2 akan masuk ke kolom 2, dll.

Lokasi eksternal

Adalah tempat file yang berisi data ditahapkan. Saat ini Azure Data Lake Storage (ADLS) Gen2 dan Azure Blob Storage didukung:

  • Lokasi eksternal untuk Blob Storage: https://< account.blob.core.windows.net/>< container>/<path>
  • Lokasi eksternal untuk ADLS Gen2: https://< account.dfs.core.windows.net/>< container>/<path>

Catatan

Titik akhir .blob juga tersedia untuk ADLS Gen2 dan saat ini menghasilkan performa terbaik. Gunakan titik akhir .blob saat .dfs tidak diperlukan untuk metode autentikasi Anda.

  • Akun - Nama akun penyimpanan

  • Kontainer - Nama kontainer blob

  • Jalur - folder atau jalur file untuk data. Lokasi dimulai dari kontainer. Jika folder ditentukan, COPY akan mengambil semua file dari folder dan semua subfoldernya. COPY mengabaikan folder tersembunyi dan tidak mengembalikan file yang dimulai dengan garis bawah (_) atau titik (.) kecuali ditentukan secara eksplisit di jalur. Perilaku ini sama bahkan ketika menentukan jalur dengan kartubebas.

Kartubebas dapat disertakan dalam jalur di mana

  • Pencocokan nama jalur kartubebas peka huruf besar/kecil
  • Kartubebas dapat diloloskan menggunakan karakter garis miring terbalik (\)
  • Ekspansi wildcard diterapkan secara rekursif. Misalnya, semua file CSV di bawah Customer1 (termasuk subdirektori Customer1) akan dimuat dalam contoh berikut: Account/Container/Customer1/*.csv

Catatan

Untuk performa terbaik, hindari menentukan kartubebas yang akan memperluas lebih dari sejumlah besar file. Jika memungkinkan, cantumkan beberapa lokasi file alih-alih menentukan kartubebas.

Beberapa lokasi file hanya dapat ditentukan dari akun penyimpanan dan kontainer yang sama melalui daftar yang dipisahkan koma seperti:

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

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

FILE_TYPE menentukan format data eksternal.

  • CSV: Menentukan file nilai yang dipisahkan koma yang sesuai dengan standar RFC 4180 .
  • PARQUET: Menentukan format Parquet.
  • ORC: Menentukan format Kolom Baris (ORC) yang Dioptimalkan.

Catatan

Jenis file 'Teks Dibatasi' di PolyBase digantikan oleh format file 'CSV' di mana pemisah koma default dapat dikonfigurasi melalui parameter FIELDTERMINATOR.

FILE_FORMAT = external_file_format_name

FILE_FORMAT hanya berlaku untuk file Parquet dan ORC dan menentukan nama objek format file eksternal yang menyimpan jenis file dan metode pemadatan untuk data eksternal. Untuk membuat format file eksternal, gunakan CREATE EXTERNAL FILE FORMAT.

KREDENSIAL (IDENTITAS = '', RAHASIA = '')

CREDENTIAL menentukan mekanisme autentikasi untuk mengakses akun penyimpanan eksternal. Metode autentikasi adalah:

CSV Parquet ORC
Penyimpanan blob Azure SAS/MSI/SERVICE PRINCIPAL/KEY/AAD SAS/KEY SAS/KEY
Azure Data Lake Gen2 SAS/MSI/SERVICE PRINCIPAL/KEY/AAD SAS (blob1)/MSI (dfs2)/SERVICE PRINCIPAL/KEY/AAD SAS (blob1)/MSI (dfs2)/SERVICE PRINCIPAL/KEY/AAD

1: Titik akhir .blob ( .blob.core.windows.net) di jalur lokasi eksternal Anda diperlukan untuk metode autentikasi ini.

2: Titik akhir .dfs ( .dfs.core.windows.net) di jalur lokasi eksternal Anda diperlukan untuk metode autentikasi ini.

Catatan

  • Saat mengautentikasi menggunakan Azure Active Directory (AAD) atau ke akun penyimpanan publik, CREDENTIAL tidak perlu ditentukan.
  • Jika akun penyimpanan Anda dikaitkan dengan VNet, Anda harus mengautentikasi menggunakan MSI (Identitas Terkelola).
  • Mengautentikasi dengan Tanda Tangan Akses Bersama (SAS)

    • IDENTITY: Konstanta dengan nilai 'Tanda Tangan Akses Bersama'
    • RAHASIA: Tandatangan akses bersamamenyediakan akses yang didelegasikan ke sumber daya di akun penyimpanan Anda.
    • Izin minimum yang diperlukan: READ dan LIST
  • Mengautentikasi dengan Perwakilan Layanan

    • IDENTITY: <ClientID>@<OAuth_2.0_Token_EndPoint>
    • RAHASIA: Kunci Perwakilan Layanan Aplikasi AAD
    • Peran RBAC minimum yang diperlukan: Kontributor data blob penyimpanan, Kontributor data blob penyimpanan, Pemilik data blob penyimpanan, atau Pembaca data blob penyimpanan
  • Mengautentikasi dengan kunci akun Penyimpanan

    • IDENTITY: Konstanta dengan nilai 'Kunci Akun Penyimpanan'
    • RAHASIA: Kunci akun penyimpanan
  • Mengautentikasi dengan Identitas Terkelola (Titik Akhir Layanan VNet)

    • IDENTITY: Konstanta dengan nilai 'Identitas Terkelola'
    • Peran RBAC minimum yang diperlukan: Kontributor data blob penyimpanan atau pemilik data blob Penyimpanan untuk server SQL Database terdaftar AAD
  • Mengautentikasi dengan pengguna AAD

    • KREDENSIAL tidak diperlukan
    • Peran RBAC minimum yang diperlukan: Kontributor data blob penyimpanan atau pemilik data blob Penyimpanan untuk pengguna AAD

ERRORFILE = Lokasi Direktori

ERRORFILE hanya berlaku untuk CSV. Menentukan direktori dalam pernyataan COPY tempat baris yang ditolak dan file kesalahan yang sesuai harus ditulis. Jalur lengkap dari akun penyimpanan dapat ditentukan atau jalur relatif terhadap kontainer dapat ditentukan. Jika jalur yang ditentukan tidak ada, jalur akan dibuat atas nama Anda. Direktori turunan dibuat dengan nama "rejectedrows". Karakter " " memastikan bahwa direktori di-escape untuk pemrosesan data lain kecuali dinamai secara eksplisit dalam parameter lokasi.

Dalam direktori ini, ada folder yang dibuat berdasarkan waktu pengiriman beban dalam format YearMonthDay -HourMinuteSecond (Misalnya 20180330-173205). Dalam folder ini, dua jenis file ditulis, file alasan (Kesalahan) dan file data (Baris) masing-masing pra-penambahan dengan queryID, distributionID, dan guid file. Karena data dan alasannya berada dalam file terpisah, file yang sesuai memiliki awalan yang cocok.

Jika ERRORFILE memiliki jalur lengkap akun penyimpanan yang ditentukan, maka ERRORFILE_CREDENTIAL akan digunakan untuk menyambungkan ke penyimpanan tersebut. Jika tidak, nilai yang disebutkan untuk INFO MASUK akan digunakan.

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

ERRORFILE_CREDENTIAL hanya berlaku untuk file CSV. Sumber data dan metode autentikasi yang didukung adalah:

  • Azure Blob Storage - SAS/PERWAKILAN LAYANAN/KUNCI/AAD

  • Azure Data Lake Gen2 - SAS/MSI/SERVICE PRINCIPAL/KEY/AAD

  • Mengautentikasi dengan Tanda Tangan Akses Bersama (SAS)

    • IDENTITY: Konstanta dengan nilai 'Tanda Tangan Akses Bersama'
    • RAHASIA: Tandatangan akses bersamamenyediakan akses yang didelegasikan ke sumber daya di akun penyimpanan Anda.
    • Izin minimum yang diperlukan: READ, LIST, WRITE, CREATE, DELETE
  • Mengautentikasi dengan Perwakilan Layanan

    • IDENTITY: <ClientID>@<OAuth_2.0_Token_EndPoint>
    • RAHASIA: Kunci Perwakilan Layanan Aplikasi AAD
    • Peran RBAC minimum yang diperlukan: Kontributor data blob penyimpanan atau pemilik data blob Penyimpanan

Catatan

Menggunakan titik akhir token OAuth 2.0 V1

  • Mengautentikasi dengan kunci akun Penyimpanan

    • IDENTITY: Konstanta dengan nilai 'Kunci Akun Penyimpanan'
    • RAHASIA: Kunci akun penyimpanan
  • Mengautentikasi dengan Identitas Terkelola (Titik Akhir Layanan VNet)

    • IDENTITY: Konstanta dengan nilai 'Identitas Terkelola'
    • Peran RBAC minimum yang diperlukan: Kontributor data blob penyimpanan atau pemilik data blob Penyimpanan untuk server SQL Database terdaftar AAD
  • Mengautentikasi dengan pengguna AAD

    • KREDENSIAL tidak diperlukan
    • Peran RBAC minimum yang diperlukan: Kontributor data blob penyimpanan atau pemilik data blob Penyimpanan untuk pengguna AAD

Catatan

Jika Anda menggunakan akun penyimpanan yang sama untuk ERRORFILE Anda dan menentukan jalur ERRORFILE relatif terhadap akar kontainer, Anda tidak perlu menentukan ERROR_CREDENTIAL.

MAXERRORS = max_errors

MAXERRORS menentukan jumlah maksimum baris penolakan yang diizinkan dalam beban sebelum operasi COPY dibatalkan. Setiap baris yang tidak dapat diimpor oleh operasi COPY diabaikan dan dihitung sebagai satu kesalahan. Jika max_errors tidak ditentukan, defaultnya adalah 0.

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

KOMPRESI bersifat opsional dan menentukan metode pemadatan data untuk data eksternal.

  • CSV mendukung GZIP
  • Parquet mendukung GZIP dan Snappy
  • ORC mendukung DefaultCodec dan Snappy.
  • Zlib adalah kompresi default untuk ORC

Perintah COPY akan otomatis memetakan jenis kompresi berdasarkan ekstensi file ketika parameter ini tidak ditentukan:

  • .gz - GZIP
  • .snappy – Snappy
  • .deflate - DefaultCodec (hanya Parquet dan ORC)

FIELDQUOTE = 'field_quote'

FIELDQUOTE berlaku untuk CSV dan menentukan satu karakter yang akan digunakan sebagai karakter kuotasi (pemisah string) dalam file CSV. Jika tidak ditentukan, karakter kuotasi (") akan digunakan sebagai karakter kuotasi seperti yang didefinisikan dalam standar RFC 4180. Karakter ASCII dan multi-byte yang diperluas dan tidak didukung dengan UTF-8 untuk FIELDQUOTE.

Catatan

Karakter FIELDQUOTE diloloskan dalam kolom string di mana ada kehadiran FIELDQUOTE ganda (pemisah).

FIELDTERMINATOR = 'field_terminator'

FIELDTERMINATOR Hanya berlaku untuk CSV. Menentukan terminator bidang yang akan digunakan dalam file CSV. Terminator bidang dapat ditentukan menggunakan notasi heksadesimal. Terminator bidang bisa multi-karakter. Terminator bidang default adalah (,). Karakter ASCII dan multi-byte yang diperluas dan tidak didukung dengan UTF-8 untuk FIELDTERMINATOR.

TERMINATOR BARIS = 'row_terminator'

TERMINATOR BARIS Hanya berlaku untuk CSV. Menentukan terminator baris yang akan digunakan dalam file CSV. Terminator baris dapat ditentukan menggunakan notasi heksadesimal. Terminator baris bisa multi-karakter. Secara default, terminator baris \r\n.

Perintah COPY mengawali karakter \r saat menentukan \n (baris baru) menghasilkan \r\n. Untuk menentukan hanya karakter \n, gunakan notasi heksadesimal (0x0A). Saat menentukan terminator baris multi-karakter dalam heksadesimal, jangan tentukan 0x di antara setiap karakter.

Karakter ASCII dan multi-byte yang diperluas dan tidak didukung dengan UTF-8 untuk TERMINATOR BARIS.

FIRSTROW = First_row_int

FIRSTROW berlaku untuk CSV dan menentukan nomor baris yang dibaca terlebih dahulu di semua file untuk perintah COPY. Nilai mulai dari 1, yang merupakan nilai default. Jika nilai diatur ke dua, baris pertama di setiap file (baris header) dilewati saat data dimuat. Baris dilewati berdasarkan keberadaan terminator baris.

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

DATEFORMAT hanya berlaku untuk CSV dan menentukan format tanggal pemetaan tanggal ke format tanggal SQL Server. Untuk gambaran umum semua jenis dan fungsi data tanggal dan waktu Transact-SQL, lihat Jenis dan Fungsi Data Tanggal dan Waktu (Transact-SQL). DATEFORMAT dalam perintah COPY lebih diutamakan daripada DATEFORMAT yang dikonfigurasi pada tingkat sesi.

PENGODEAN = | 'UTF8' 'UTF16'

ENCODING hanya berlaku untuk CSV. Defaultnya adalah UTF8. Menentukan standar pengodean data untuk file yang dimuat oleh perintah COPY.

IDENTITY_INSERT = | 'AKTIF' 'NONAKTIF'

IDENTITY_INSERT menentukan apakah nilai identitas atau nilai dalam file data yang diimpor akan digunakan untuk kolom identitas. Jika IDENTITY_INSERT NONAKTIF (default), nilai identitas untuk kolom ini diverifikasi, tetapi tidak diimpor. Azure Synapse Analytics akan secara otomatis menetapkan nilai unik berdasarkan nilai benih dan kenaikan yang ditentukan selama pembuatan tabel. Perhatikan perilaku berikut dengan perintah COPY:

  • Jika IDENTITY_INSERT NONAKTIF, dan tabel memiliki kolom identitas
    • Daftar kolom harus ditentukan yang tidak memetakan bidang input ke kolom identitas.
  • Jika IDENTITY_INSERT AKTIF, dan tabel memiliki kolom identitas
    • Jika daftar kolom diteruskan, daftar kolom harus memetakan bidang input ke kolom identitas.
  • Nilai default tidak didukung untuk KOLOM IDENTITAS dalam daftar kolom.
  • IDENTITY_INSERT hanya dapat diatur untuk satu tabel pada satu waktu.

AUTO_CREATE_TABLE = { 'ON' | 'OFF' }

AUTO_CREATE_TABLE menentukan apakah tabel dapat dibuat secara otomatis dengan bekerja bersama dengan penemuan skema otomatis. Ini hanya tersedia untuk file parket.

  • AKTIF: Mengaktifkan pembuatan tabel otomatis. Proses COPY INTO akan membuat tabel baru secara otomatis dengan menemukan struktur file yang akan dimuat.
  • NONAKTIF: Pembuatan tabel otomatis tidak diaktifkan. Default.

Catatan

Pembuatan tabel otomatis bekerja bersama dengan penemuan skema otomatis. Pembuatan tabel otomatis TIDAK diaktifkan secara default.

Jangan muat ke dalam tabel terdistribusi hash dari file parket menggunakan COPY INTO dengan AUTO_CREATE_TABLE = 'ON'.

Jika file parket akan dimuat ke dalam tabel terdistribusi hash menggunakan COPY INTO, muat ke dalam tabel penahapan round robin diikuti dengan INSERT ... SELECT dari tabel tersebut ke tabel terdistribusi hash target.

Izin

Pengguna yang menjalankan perintah COPY harus memiliki izin berikut:

Memerlukan izin INSERT dan ADMINISTER BULK OPERATIONS. Di Azure Synapse Izin Analitik, SISIPKAN, dan KELOLA OPERASI MASSAL DATABASE diperlukan.

Contoh

A. Memuat dari akun penyimpanan publik

Contoh berikut adalah bentuk paling sederhana dari perintah COPY, yang memuat data dari akun penyimpanan publik. Untuk contoh ini, default pernyataan COPY cocok dengan format file csv item baris.

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

Nilai default perintah COPY adalah:

  • DATEFORMAT = Session DATEFORMAT

  • MAXERRORS = 0

  • COMPRESSION default is uncompressed

  • FIELDQUOTE = ""

  • FIELDTERMINATOR = ","

  • ROWTERMINATOR = '\n'

Penting

COPY memperlakukan '\n' sebagai '\r\n' secara internal. Untuk informasi selengkapnya, lihat bagian ROWTERMINATOR.

  • FIRSTROW = 1

  • PENGODEAN = 'UTF8'

  • FILE_TYPE = 'CSV'

  • IDENTITY_INSERT = 'NONAKTIF'

B. Memuat autentikasi melalui Share Access Signature (SAS)

Contoh berikut memuat file yang menggunakan umpan baris sebagai terminator baris seperti output UNIX. Contoh ini juga menggunakan kunci SAS untuk mengautentikasi ke penyimpanan blob Azure.

COPY INTO test_1
FROM 'https://myaccount.blob.core.windows.net/myblobcontainer/folder1/'
WITH (
    FILE_TYPE = 'CSV',
    CREDENTIAL=(IDENTITY= 'Shared Access Signature', SECRET='<Your_SAS_Token>'),
    --CREDENTIAL should look something like this:
    --CREDENTIAL=(IDENTITY= 'Shared Access Signature', SECRET='?sv=2018-03-28&ss=bfqt&srt=sco&sp=rl&st=2016-10-17T20%3A14%3A55Z&se=2021-10-18T20%3A19%3A00Z&sig=IEoOdmeYnE9%2FKiJDSHFSYsz4AkNa%2F%2BTx61FuQ%2FfKHefqoBE%3D'),
    FIELDQUOTE = '"',
    FIELDTERMINATOR=';',
    ROWTERMINATOR='0X0A',
    ENCODING = 'UTF8',
    DATEFORMAT = 'ymd',
    MAXERRORS = 10,
    ERRORFILE = '/errorsfolder',--path starting from the storage container
    IDENTITY_INSERT = 'ON'
)

C. Muat dengan daftar kolom dengan nilai default yang mengautentikasi melalui Kunci Akun Penyimpanan

Contoh ini memuat file yang menentukan daftar kolom dengan nilai default.

--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. Muat Parquet atau ORC menggunakan objek format file yang ada

Contoh ini menggunakan kartubebas untuk memuat semua file parket di bawah folder.

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. Memuat yang menentukan kartubebas dan beberapa file

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. Memuat menggunakan kredensial MSI

COPY INTO dbo.myCOPYDemoTable
FROM 'https://myaccount.blob.core.windows.net/myblobcontainer/folder0/*.txt'
WITH (
    FILE_TYPE = 'CSV',
    CREDENTIAL = (IDENTITY = 'Managed Identity'),
    FIELDQUOTE = '"',
    FIELDTERMINATOR=','
)

G. Muat menggunakan deteksi skema otomatis

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

Apa performa perintah COPY dibandingkan dengan PolyBase?

Perintah COPY akan memiliki performa yang lebih baik tergantung pada beban kerja Anda. Untuk performa pemuatan terbaik, pertimbangkan untuk membagi input Anda menjadi beberapa file saat memuat CSV. Panduan ini juga berlaku untuk file terkompresi gzip.

Apa panduan pemisahan file untuk perintah COPY yang memuat file CSV?

Panduan tentang jumlah file diuraikan dalam tabel di bawah ini. Setelah jumlah file yang disarankan tercapai, Anda akan memiliki performa yang lebih baik semakin besar file. Untuk pengalaman pemisahan file sederhana, lihat dokumentasi berikut.

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

Apa panduan pemisahan file untuk perintah COPY yang memuat file Parquet atau ORC?

Tidak perlu membagi file Parquet dan ORC karena perintah COPY akan secara otomatis membagi file. File Parquet dan ORC di akun penyimpanan Azure harus 256 MB atau lebih besar untuk performa terbaik.

Apakah ada batasan pada jumlah atau ukuran file?

Tidak ada batasan jumlah atau ukuran file; namun, untuk performa terbaik, kami merekomendasikan file yang setidaknya 4 MB.

Apakah ada masalah yang diketahui dengan pernyataan COPY?

Jika Anda memiliki ruang kerja Azure Synapse yang dibuat sebelum 12/07/2020, Anda mungkin mengalami pesan kesalahan serupa saat mengautentikasi menggunakan Identitas Terkelola:

com.microsoft.sqlserver.jdbc.SQLServerException: Identitas Layanan Terkelola belum diaktifkan di server ini. Aktifkan Identitas Layanan Terkelola, lalu coba kembali.

Ikuti langkah-langkah ini untuk mengatasi masalah ini dengan mendaftarkan ulang identitas terkelola ruang kerja:

  1. Buka ruang kerja Synapse Anda di portal Microsoft Azure
  2. Masuk ke halaman Identitas terkelola
  3. Jika opsi "Izinkan Alur" sudah dicentang, Anda harus menghapus centang pengaturan ini dan menyimpan
  4. Centang opsi "Izinkan Alur" dan simpan

Lihat juga

Memuat gambaran umum dengan Azure Synapse Analytics