Mengekspor data ke tabel eksternal

Anda dapat mengekspor data dengan menentukan tabel eksternal dan mengekspor data ke sana. Properti tabel ditentukan saat membuat tabel eksternal. Perintah ekspor mereferensikan tabel eksternal berdasarkan nama.

Perintah memerlukan izin admin tabel atau admin database.

Sintaks

.export [async] totableExternalTableName
[with(PropertyName=PropertyValue,...)] <| Query

Argumen

  • ExternalTableName: nama tabel eksternal untuk diekspor.
  • Kueri: ekspor kueri.

Properti

Properti berikut didukung sebagai bagian dari perintah ekspor ke tabel eksternal:

Properti Jenis Deskripsi Default
sizeLimit long Batas ukuran dalam byte pada artefak penyimpanan tunggal yang ditulis (sebelum kompresi). Rentang yang diizinkan adalah 100 MB (default) hingga 1 GB.
distributed bool Nonaktifkan/aktifkan ekspor terdistribusi. Pengaturan ke false sama dengan petunjuk distribusi single. Defaultnya adalah true.
parquetRowGroupSize int Relevan hanya saat format data adalah Parquet. Mengontrol ukuran grup baris dalam file yang diekspor. Ukuran grup baris default adalah 100.000 catatan.
concurrency Number Petunjuk sistem berapa banyak partisi yang harus dijalankan secara paralel. Lihat catatan di bawah. Nilai defaultnya adalah 16.
spread Number Petunjuk sistem cara mendistribusikan partisi di antara node kluster. Misalnya, jika ada partisi N dan petunjuk spread diatur ke P, partisi N akan diproses oleh P node cluster yang berbeda secara paralel/berurutan tergantung pada petunjuk konkurensi. Lihat catatan di bawah. Nilai default adalah 1.
useNativeParquetWriter bool Gunakan implementasi ekspor baru saat mengekspor ke Parquet Lihat catatan di bawah ini. Defaultnya adalah false.

Catatan

hint.spread dan hint.concurrency adalah properti yang digunakan untuk mengurangi/meningkatkan konkurensi operasi tulis. Untuk detail selengkapnya, lihat operator partisi. Properti ini hanya relevan saat mengekspor ke tabel eksternal yang dipartisi oleh partisi string. Secara default, jumlah node yang mengekspor secara bersamaan akan menjadi nilai minimum antara 64 dan jumlah node kluster.

Output

Parameter output Jenis Deskripsi
ExternalTableName String Nama tabel eksternal
Jalur String Jalur output.
NumRecords String Jumlah data yang diekspor ke jalur.

Catatan

  • Skema output kueri ekspor harus cocok dengan skema tabel eksternal, termasuk semua kolom yang ditentukan oleh partisi. Misalnya, jika tabel dipartisi oleh DateTime, skema output kueri harus memiliki kolom Stempel Waktu yang cocok dengan TimestampColumnName. Nama kolom ini didefinisikan dalam definisi partisi tabel eksternal.

  • Tidak mungkin untuk mengganti properti tabel eksternal menggunakan perintah ekspor. Misalnya, Anda tidak dapat mengekspor data dalam format Parket ke tabel eksternal yang format datanya CSV.

  • Jika tabel eksternal dipartisi, artefak yang diekspor akan ditulis ke direktori masing-masing sesuai dengan definisi partisi seperti yang terlihat pada contoh tabel eksternal yang dipartisi.

    • Jika nilai partisi adalah null/kosong atau merupakan nilai direktori yang tidak valid, sesuai definisi penyimpanan target, nilai partisi diganti dengan nilai __DEFAULT_PARTITION__default.
  • Untuk saran untuk mengatasi kesalahan penyimpanan selama perintah ekspor, lihat kegagalan selama perintah ekspor.

  • Kolom tabel eksternal dipetakan ke jenis data format target yang sesuai, sesuai dengan aturan pemetaan jenis data.

  • Ekspor asli Parquet merupakan mekanisme ekspor dengan sumber daya ringan yang lebih berkinerja. Perhatikan bahwa kolom 'datetime' yang diekspor saat ini tidak didukung oleh Synapse SQL 'COPY'.

Jumlah file

Jumlah file yang ditulis per partisi tergantung pada pengaturan:

  • Jika tabel eksternal hanya mencakup partisi tanggalwaktu, atau tidak ada partisi sama sekali, jumlah file yang ditulis (untuk setiap partisi, jika ada) harus mirip dengan jumlah node dalam kluster (atau lebih, jika sizeLimit tercapai). Saat operasi ekspor didistribusikan, semua node dalam kluster mengekspor secara bersamaan. Untuk menonaktifkan distribusi, sehingga hanya satu node yang menulis, atur distributed ke false. Proses ini akan membuat lebih sedikit file, tetapi akan mengurangi performa ekspor.

  • Jika tabel eksternal menyertakan partisi oleh kolom string, jumlah file yang diekspor harus berupa satu file per partisi (atau lebih, jika sizeLimit tercapai). Semua node masih berpartisipasi dalam ekspor (operasi didistribusikan), tetapi setiap partisi ditetapkan ke node tertentu. Pengaturan distributed ke false, hanya akan menyebabkan satu node melakukan ekspor, tetapi perilaku akan tetap sama (satu file ditulis per partisi).

Contoh

Contoh tabel eksternal yang tidak dipartisi

ExternalBlob adalah tabel eksternal yang tidak dipartisi.

.export to table ExternalBlob <| T
ExternalTableName Jalur NumRecords
ExternalBlob http://storage1.blob.core.windows.net/externaltable1cont1/1_58017c550b384c0db0fea61a8661333e.csv 10

Contoh tabel eksternal yang dipartisi

PartitionedExternalBlob adalah tabel eksternal, didefinisikan sebagai berikut:

.create external table PartitionedExternalBlob (Timestamp:datetime, CustomerName:string) 
kind=blob
partition by (CustomerName:string=CustomerName, Date:datetime=startofday(Timestamp))   
pathformat = ("CustomerName=" CustomerName "/" datetime_pattern("yyyy/MM/dd", Date))   
dataformat=csv
( 
   h@'http://storageaccount.blob.core.windows.net/container1;secretKey'
)
.export to table PartitionedExternalBlob <| T
ExternalTableName Jalur NumRecords
ExternalBlob http://storageaccount.blob.core.windows.net/container1/CustomerName=customer1/2019/01/01/fa36f35c-c064-414d-b8e2-e75cf157ec35_1_58017c550b384c0db0fea61a8661333e.csv 10
ExternalBlob http://storageaccount.blob.core.windows.net/container1/CustomerName=customer2/2019/01/01/fa36f35c-c064-414d-b8e2-e75cf157ec35_2_b785beec2c004d93b7cd531208424dc9.csv 10

Jika perintah dijalankan secara asinkron (dengan menggunakan async kata kunci), output tersedia menggunakan perintah tampilkan detail operasi.