Melaporkan seluruh database cloud yang skalanya diperluas (pratinjau)
Berlaku untuk:Azure SQL Database
Database yang dipecah mendistribusikan baris di seluruh tingkat data yang skalanya diperluas. Skema ini identik pada semua database yang berpartisipasi, juga dikenal sebagai pemartisian horizontal. Menggunakan kueri elastis, Anda bisa membuat laporan yang mencakup semua database dalam database yang dipecah.
Untuk memulai cepat, lihat Pelaporan di seluruh database cloud yang skalanya diperluas.
Untuk database yang tidak dipecah, lihat Membuat kueri di seluruh database awan dengan skema yang berbeda.
Prasyarat
- Buat peta pecahan menggunakan pustaka klien database elastis. lihat Manajemen peta Pecahan. Atau gunakan sampel aplikasi di Mulai menggunakan alat database elastis.
- Atau, lihat Memigrasikan database yang sudah ada ke database yang skalanya diperluas.
- Pengguna harus memiliki izin MENGUBAH SUMBER DATA EKSTERNAL. Izin ini disertakan dengan izin MENGUBAH DATABASE.
- MENGUBAH izin SUMBER DATA EKSTERNAL diperlukan untuk merujuk ke sumber data yang mendasarinya.
Gambaran Umum
Pernyataan ini membuat representasi metadata dari tingkat data yang dipecah Anda dalam database kueri elastis.
- CREATE MASTER KEY
- CREATE DATABASE SCOPED CREDENTIAL
- CREATE EXTERNAL DATA SOURCE
- CREATE EXTERNAL TABLE
1.1. Membuat kunci induk dan info masuk yang dicakup database
Info masuk digunakan oleh kueri elastis untuk menyambungkan ke database jarak jauh Anda.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'password';
CREATE DATABASE SCOPED CREDENTIAL [<credential_name>] WITH IDENTITY = '<username>',
SECRET = '<password>';
Catatan
Pastikan bahwa "<nama pengguna>" tidak menyertakan akhiran "@servername".
1.2 Membuat sumber data eksternal
Sintaksis:
<External_Data_Source> ::=
CREATE EXTERNAL DATA SOURCE <data_source_name> WITH
(TYPE = SHARD_MAP_MANAGER,
LOCATION = '<fully_qualified_server_name>',
DATABASE_NAME = '<shardmap_database_name>',
CREDENTIAL = <credential_name>,
SHARD_MAP_NAME = '<shardmapname>'
) [;]
Contoh
CREATE EXTERNAL DATA SOURCE MyExtSrc
WITH
(
TYPE=SHARD_MAP_MANAGER,
LOCATION='myserver.database.windows.net',
DATABASE_NAME='ShardMapDatabase',
CREDENTIAL= SMMUser,
SHARD_MAP_NAME='ShardMap'
);
Mengambil daftar sumber data eksternal saat ini:
select * from sys.external_data_sources;
Sumber data eksternal mereferensikan peta pecahan Anda. Kueri elastis kemudian menggunakan sumber data eksternal dan peta pecahan yang mendasarinya untuk menghitung database yang berpartisipasi dalam tingkat data. Informasi masuk yang sama digunakan untuk membaca peta pecahan dan untuk mengakses data pada pecahan selama pemrosesan kueri elastis.
1.3 Membuat tabel eksternal
Sintaksis:
CREATE EXTERNAL TABLE [ database_name . [ schema_name ] . | schema_name. ] table_name
( { <column_definition> } [ ,...n ])
{ WITH ( <sharded_external_table_options> ) }
) [;]
<sharded_external_table_options> ::=
DATA_SOURCE = <External_Data_Source>,
[ SCHEMA_NAME = N'nonescaped_schema_name',]
[ OBJECT_NAME = N'nonescaped_object_name',]
DISTRIBUTION = SHARDED(<sharding_column_name>) | REPLICATED |ROUND_ROBIN
Contoh
CREATE EXTERNAL TABLE [dbo].[order_line](
[ol_o_id] int NOT NULL,
[ol_d_id] tinyint NOT NULL,
[ol_w_id] int NOT NULL,
[ol_number] tinyint NOT NULL,
[ol_i_id] int NOT NULL,
[ol_delivery_d] datetime NOT NULL,
[ol_amount] smallmoney NOT NULL,
[ol_supply_w_id] int NOT NULL,
[ol_quantity] smallint NOT NULL,
[ol_dist_info] char(24) NOT NULL
)
WITH
(
DATA_SOURCE = MyExtSrc,
SCHEMA_NAME = 'orders',
OBJECT_NAME = 'order_details',
DISTRIBUTION=SHARDED(ol_w_id)
);
Ambil daftar tabel eksternal dari database saat ini:
SELECT * from sys.external_tables;
Untuk mengilangkan tabel eksternal:
DROP EXTERNAL TABLE [ database_name . [ schema_name ] . | schema_name. ] table_name[;]
Keterangan
Klausa DATA_SOURCE mendefinisikan sumber data eksternal (peta pecahan) yang digunakan untuk tabel eksternal.
Klausa SCHEMA_NAME dan OBJECT_NAME memetakan definisi tabel eksternal ke tabel dalam skema yang berbeda. Jika dihilangkan, skema objek jarak jauh diasumsikan dbo
dan namanya diasumsikan identik dengan nama tabel eksternal yang ditentukan. Skema ini berguna jika nama tabel jarak jauh Anda sudah diambil dalam database tempat Anda ingin membuat tabel eksternal. Misalnya, Anda ingin menentukan tabel eksternal untuk mendapatkan tampilan agregat tampilan katalog atau DMV pada tingkat data yang skalanya diperluas. Karena tampilan katalog dan DMV sudah ada secara lokal, Anda tidak dapat menggunakan nama mereka untuk definisi tabel eksternal. Sebagai gantinya, gunakan nama yang berbeda dan gunakan tampilan katalog atau nama DMV dalam klausa SCHEMA_NAME dan/atau OBJECT_NAME. (Lihat contoh di bawah ini.)
Klausa DISTRIBUTION menentukan distribusi data yang digunakan untuk tabel ini. Prosesor kueri menggunakan informasi yang disediakan dalam klausa DISTRIBUTION untuk menyusun rencana kueri yang paling efisien.
- SHARDED berarti data dipartisi secara horizontal di seluruh database. Kunci partisi untuk distribusi data adalah parameter <sharding_column_name>.
- REPLICATED berarti salinan tabel yang identik ada di setiap database. Anda bertanggung jawab untuk memastikan bahwa replika identik di seluruh database.
- ROUND_ROBIN berarti tabel dipartisi secara horizontal menggunakan metode distribusi yang bergantung pada aplikasi.
Referensi tingkat data: Tabel eksternal DDL merujuk ke sumber data eksternal. Sumber data eksternal menentukan peta pecahan yang menyediakan tabel eksternal dengan informasi yang diperlukan untuk menemukan semua database di tingkat data Anda.
Pertimbangan keamanan
Pengguna dengan akses ke tabel eksternal secara otomatis akan mendapatkan akses ke tabel jarak jauh yang mendasarinya di bawah info masuk yang diberikan dalam definisi sumber data eksternal. Hindari elevasi melalui info masuk sumber data eksternal. Gunakan IZINKAN atau CABUT untuk tabel eksternal seolah-olah tabel tersebut adalah tabel biasa.
Setelah menentukan sumber data eksternal dan tabel eksternal Anda, sekarang Anda dapat menggunakan T-SQL lengkap di atas tabel eksternal.
Contoh: mengkueri database yang dipartisi horizontal
Kueri berikut ini melakukan gabungan tiga arah antara gudang, pesanan, dan garis pesanan dan menggunakan beberapa agregat dan filter selektif. Kueri ini mengasumsikan (1) pemartisian horizontal (pemecahan) dan (2) bahwa gudang, pesanan, dan garis pesanan dipecah oleh kolom ID gudang, dan bahwa kueri elastis dapat ikut menemukan gabungan pada pecahan dan memproses bagian mahal dari kueri pada pecahan secara paralel.
select
w_id as warehouse,
o_c_id as customer,
count(*) as cnt_orderline,
max(ol_quantity) as max_quantity,
avg(ol_amount) as avg_amount,
min(ol_delivery_d) as min_deliv_date
from warehouse
join orders
on w_id = o_w_id
join order_line
on o_id = ol_o_id and o_w_id = ol_w_id
where w_id > 100 and w_id < 200
group by w_id, o_c_id
Prosedur tersimpan untuk eksekusi T-SQL jarak jauh: sp_execute_remote
Kueri elastis juga memperkenalkan prosedur tersimpan yang menyediakan akses langsung ke pecahan. Prosedur tersimpan disebut sp_execute _remote dan dapat digunakan untuk menjalankan prosedur tersimpan jarak jauh atau kode T-SQL pada database jarak jauh. Prosedur ini membutuhkan parameter berikut:
- Nama sumber data (nvarchar): Nama sumber data eksternal dari jenis RDBMS.
- Kueri (nvarchar): Kueri T-SQL yang akan dieksekusi pada setiap pecahan.
- Deklarasi parameter (nvarchar) - opsional: Untai dengan definisi jenis data untuk parameter yang digunakan dalam parameter Kueri (seperti sp_executesql).
- Daftar nilai parameter - opsional: Daftar nilai parameter yang dipisahkan koma (seperti sp_executesql).
sp_execute_remote menggunakan sumber data eksternal yang disediakan dalam parameter pemanggilan untuk mengeksekusi pernyataan T-SQL yang diberikan pada database jarak jauh. Ini menggunakan informasi masuk sumber data eksternal untuk menyambungkan ke database manajer shardmap dan database jarak jauh.
Contoh:
EXEC sp_execute_remote
N'MyExtSrc',
N'select count(w_id) as foo from warehouse'
Konektivitas untuk alat
Gunakan string koneksi SQL Server reguler untuk menyambungkan aplikasi, BI, dan alat integrasi data Anda ke database dengan definisi tabel eksternal Anda. Pastikan bahwa SQL Server didukung sebagai sumber data untuk alat Anda. Kemudian referensikan database kueri elastis seperti database SQL Server lainnya yang terhubung ke alat, dan gunakan tabel eksternal dari alat atau aplikasi Anda seolah-olah itu adalah tabel lokal.
Praktik terbaik
- Pastikan bahwa database titik akhir kueri elastis telah diberikan akses ke database shardmap dan semua pecahan melalui firewall Microsoft Azure SQL Database.
- Memvalidasi atau memberlakukan distribusi data yang ditentukan oleh tabel eksternal. Jika distribusi data aktual Anda yang sebenarnya berbeda dari distribusi yang ditentukan dalam definisi tabel Anda, kueri Anda dapat menghasilkan hasil yang tidak diharapkan.
- Kueri elastis saat ini tidak melakukan eliminasi pecahan ketika predikat di atas kunci sharding akan memungkinkannya untuk dengan aman mengecualikan pecahan tertentu dari pemrosesan.
- Kueri elastis berfungsi paling baik untuk kueri yang sebagian besar komputasinya dapat dilakukan pada pecahan. Anda biasanya mendapatkan kinerja kueri terbaik dengan predikat filter selektif yang dapat dievaluasi pada pecahan atau gabungan di atas tombol pemartisian yang dapat dilakukan dengan cara sejajar dengan partisi pada semua pecahan. Pola kueri lainnya mungkin perlu memuat data dalam jumlah besar dari pecahan ke simpul utama dan mungkin akan membuat performanya menjadi buruk
Langkah berikutnya
- Untuk gambaran umum kueri elastis, lihat Gambaran umum kueri elastis.
- Untuk tutorial pemartisian vertikal, lihat Mulai menggunakan kueri lintas database (pemartisian vertikal).
- Untuk sintaks dan contoh kueri untuk data yang dipartisi secara vertikal, lihat Mengkueri data yang dipartisi secara vertikal)
- Untuk tutorial pemartisian horizontal (sharding), lihat Memulai kueri elastis untuk pemartisian horizontal (sharding).
- Lihat sp_execute _remote untuk prosedur tersimpan yang menjalankan pernyataan T-SQL pada Azure SQL Database jarak jauh tunggal atau kumpulan database yang berfungsi sebagai pecahan dalam skema partisi horizontal.
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk