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.
Şunlar için geçerlidir: SQL Server 2016 (13.x) ve sonraki sürümleri
Microsoft Fabric'teAzure SQL Veritabanı
Azure SQL Yönetilen Örneği
Azure Synapse Analytics
Analytics Platform Sistemi (PDW)
Warehouse
Dış tablo oluşturur.
Bu makalede, seçtiğiniz SQL ürünü için söz dizimi, bağımsız değişkenler, açıklamalar, izinler ve örnekler sağlanır.
Ürün seçin
Aşağıdaki satırda, ilgilendiğiniz ürün adını seçin ve yalnızca bu ürünün bilgileri görüntülenir.
* SQL Server *
SQL Veritabanı
Azure SQL Yönetilen Örneği
Azure Synapse'i
Analiz
Genel Bakış: SQL Server
Bu komut, Hadoop kümesinde veya Azure Blob Depolama'da depolanan verilere başvuran Bir Hadoop kümesinde veya Azure Blob Depolama polyBase dış tablosunda depolanan verilere erişmek için PolyBase için bir dış tablo oluşturur.
Şunlar için geçerlidir: SQL Server 2016 (veya üzeri)
PolyBase sorguları için dış veri kaynağıyla bir dış tablo kullanın. Dış veri kaynakları, bağlantı kurmak ve şu birincil kullanım örneklerini desteklemek için kullanılır:
- SQL Server'da PolyBase ile Veri sanallaştırma kullanarak veri sanallaştırma ve veri yükü
-
BULK INSERTveyaOPENROWSETkullanarak SQL Server veya SQL Veritabanı kullanarak toplu yükleme işlemleri
Dış tablo bir dış veri kaynağını temel alır.
Transact-SQL söz dizimi kuralları
Sözdizimi
-- Create a new external table
CREATE EXTERNAL TABLE { database_name.schema_name.table_name | schema_name.table_name | table_name }
( <column_definition> [ ,...n ] )
WITH (
LOCATION = 'folder_or_filepath',
DATA_SOURCE = external_data_source_name,
[ FILE_FORMAT = external_file_format_name ]
[ , <reject_options> [ ,...n ] ]
)
[;]
<reject_options> ::=
{
| REJECT_TYPE = value | percentage
| REJECT_VALUE = reject_value
| REJECT_SAMPLE_VALUE = reject_sample_value,
| REJECTED_ROW_LOCATION = '/REJECT_Directory'
}
<column_definition> ::=
column_name <data_type>
[ COLLATE collation_name ]
[ NULL | NOT NULL ]
Bağımsız değişken
{ database_name.schema_name.table_name | schema_name.table_name | table_name }
Oluşturulacak tablonun bir ile üç bölümlü adı.
Dış tablo için, SQL yalnızca tablo meta verilerini ve Hadoop veya Azure Blob Depolama'da başvuruda bulunılan dosya veya klasörle ilgili temel istatistikleri depolar. SQL Server'da hiçbir gerçek veri taşınmaz veya depolanmaz.
Önemli
En iyi performans için, dış veri kaynağı sürücüsü üç bölümlü bir adı destekliyorsa, üç bölümlü adın sağlanması kesinlikle önerilir.
< > column_definition [ ,... n ]
CREATE EXTERNAL TABLE sütun adını, veri türünü, null atanabilirliği ve harmanlamayı yapılandırma özelliğini destekler. Dış tablolarda DEFAULT CONSTRAINT komutunu kullanamazsınız.
Veri türleri ve sütun sayısı dahil olmak üzere sütun tanımlarının dış dosyalardaki verilerle eşleşmesi gerekir. Uyuşmazlık varsa, gerçek veriler sorgulanırken dosya satırları reddedilir.
LOCATION = 'folder_or_filepath'
Hadoop veya Azure Blob Depolama'daki gerçek veriler için klasörü veya dosya yolunu ve dosya adını belirtir. Ayrıca, SQL Server 2022'den (16.x) başlayarak S3 uyumlu nesne depolama desteklenir. Konum kök klasörden başlar. Kök klasör, dış veri kaynağında belirtilen veri konumudur.
SQL Server'da CREATE EXTERNAL TABLE deyimi, henüz yoksa yolu ve klasörü oluşturur. Ardından INSERT INTO kullanarak verileri yerel bir SQL Server tablosundan dış veri kaynağına aktarabilirsiniz. Daha fazla bilgi için bkz . PolyBase sorgu senaryoları.
KLASÖR OLARAK KONUM belirtirseniz, dış tablodan seçen bir PolyBase sorgusu klasörden ve tüm alt klasörlerinden dosyaları alır. Tıpkı Hadoop gibi PolyBase de gizli klasörleri döndürmez. Ayrıca, dosya adının altı çizili (_) veya nokta (.) ile başladığı dosyaları döndürmez.
Aşağıdaki görüntü örneğinde, LOCATION='/webdata/'polyBase sorgusu mydata.txt ve mydata2.txtsatırlarını döndürür. Gizli bir alt klasörde bulunan bir dosya olduğundan mydata3.txt döndürmez. Gizli bir dosya olduğundan _hidden.txt döndürmez.
Varsayılanı değiştirmek ve yalnızca kök klasörden okumak için <polybase.recursive.traversal> özniteliğini core-site.xml yapılandırma dosyasında 'false' olarak ayarlayın. Bu dosya, SQL Server'ın <SqlBinRoot>\PolyBase\Hadoop\Conf kökü altında bin altında bulunur. Örneğin, C:\Program Files\Microsoft SQL Server\MSSQL13.XD14\MSSQL\Binn.
DATA_SOURCE = external_data_source_name
Dış verilerin konumunu içeren dış veri kaynağının adını belirtir. Bu konum bir Hadoop Dosya Sistemi (HDFS), Azure Blob Depolama kapsayıcısı veya Azure Data Lake Store'dur. Dış veri kaynağı oluşturmak için CREATE EXTERNAL DATA SOURCE (Transact-SQL) kullanın.
FILE_FORMAT = external_file_format_name
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 FORMAT (Transact-SQL) kullanın.
Dış dosya biçimleri birden çok benzer dış dosya tarafından yeniden kullanılabilir.
Reddetme Seçenekleri
Bu seçenek yalnızca TYPE = HADOOP olan dış veri kaynaklarında kullanılabilir.
PolyBase'in dış veri kaynağından kirli kayıtlarını nasıl işleyeceklerini belirleyen reddetme parametreleri belirtebilirsiniz. Gerçek veri türleri veya sütun sayısı dış tablonun sütun tanımlarıyla eşleşmiyorsa veri kaydı 'kirli' olarak kabul edilir.
Reddetme değerlerini belirtmediğinizde veya değiştirmediğinizde PolyBase varsayılan değerleri kullanır. CREATE EXTERNAL TABLE deyimiyle bir dış tablo oluşturduğunuzda reddetme parametreleriyle ilgili bu bilgiler ek meta veriler olarak depolanır. Gelecekte bir SELECT deyimi veya SELECT INTO SELECT deyimi dış tablodan veri seçtiğinde PolyBase, gerçek sorgu başarısız olmadan önce reddedilebilen satırların sayısını veya yüzdesini belirlemek için reddetme seçeneklerini kullanır. Reddetme eşiği aşılana kadar sorgu (kısmi) sonuçlar döndürür. Ardından uygun hata iletisiyle başarısız olur.
REJECT_TYPE = değer | Yüzde
REJECT_VALUE seçeneğinin değişmez değer olarak mı yoksa yüzde olarak mı belirtildiğini açıklar.
değer
REJECT_VALUE, yüzde değil değişmez değerdir. Reddedilen satır sayısı reject_valueaşıldığında sorgu başarısız olur.
Örneğin, REJECT_VALUE = 5 ve REJECT_TYPE = valuebeş satır reddedildikten sonra SELECT sorgusu başarısız olur.
yüzdesi
REJECT_VALUE, değişmez değer değil yüzdedir. Başarısız satırların yüzdesireject_valueaşıldığında sorgu başarısız olur. Başarısız satırların yüzdesi aralıklarla hesaplanır.
REJECT_VALUE = reject_value
Sorgu başarısız olmadan önce reddedilebilen satırların değerini veya yüzdesini belirtir.
REJECT_TYPE = değeri için reject_value 0 ile 2.147.483.647 arasında bir tamsayı olmalıdır.
REJECT_TYPE = yüzdesi için reject_value 0 ile 100 arasında bir kayan değer olmalıdır.
REJECT_SAMPLE_VALUE = reject_sample_value
REJECT_TYPE = yüzde değerini belirttiğinizde bu öznitelik gereklidir. PolyBase reddedilen satırların yüzdesini yeniden hesaplamadan önce alınmaya çalışacak satır sayısını belirler.
reject_sample_value parametresi 0 ile 2.147.483.647 arasında bir tamsayı olmalıdır.
Örneğin, REJECT_SAMPLE_VALUE = 1000 ise PolyBase, dış veri dosyasından 1000 satırı içeri aktarma girişiminde bulunduktan sonra başarısız olan satırların yüzdesini hesaplar. Başarısız satırların yüzdesi reject_value'den küçükse PolyBase 1.000 satır daha almayı dener. Her ek 1.000 satırı içeri aktarmayı denedikten sonra başarısız olan satırların yüzdesini yeniden hesaplamaya devam eder.
Not
PolyBase başarısız satırların yüzdesini aralıklarla hesap ettiğinden, başarısız satırların gerçek yüzdesi reject_valueaşabilir.
Örnek:
Bu örnekte, üç REDDET seçeneğinin birbiriyle nasıl etkileşimde olduğu gösterilmektedir. Örneğin, REJECT_TYPE = yüzde, REJECT_VALUE = 30 ve REJECT_SAMPLE_VALUE = 100 ise aşağıdaki senaryo oluşabilir:
- PolyBase ilk 100 satırı almayı dener; 25 başarısız ve 75 başarılı.
- Başarısız satırların yüzdesi 25%olarak hesaplanır ve bu değer 30%reddetme değerinden küçüktür. Sonuç olarak PolyBase dış veri kaynağından veri almaya devam eder.
- PolyBase sonraki 100 satırı yüklemeyi dener; bu kez 25 satır başarılı olur ve 75 satır başarısız olur.
- Başarısız satırların yüzdesi 50%olarak yeniden hesaplanır. Başarısız satırların yüzdesi 30% reddetme değerini aştı.
- PolyBase sorgusu, ilk 200 satırı döndürmeyi denedikten sonra 50% reddedilen satırla başarısız olur. PolyBase sorgusu reddetme eşiğinin aşıldığını algılamadan önce eşleşen satırlar döndürüldü.
REJECTED_ROW_LOCATION = Dizin Konumu
Şunlar için geçerlidir: SQL Server 2019 CU6 ve sonraki sürümleri, Azure Synapse Analytics.
Dış Veri Kaynağı içindeki reddedilen satırların ve ilgili hata dosyasının yazılması gereken dizini belirtir.
Belirtilen yol yoksa PolyBase sizin adınıza bir yol oluşturur.
_rejectedrowsadlı bir 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. Bu dizinde, YearMonthDay -HourMinuteSecond biçiminde (örneğin, 20230330-173205) yük gönderme zamanına göre oluşturulmuş bir klasör vardır. Bu klasörde, _reason dosyası ve veri dosyası olmak üzere iki tür dosya yazılır. Bu seçenek yalnızca TYPE = HADOOP dış veri kaynaklarıyla ve DELIMITEDTEXTFORMAT_TYPEkullanan dış tablolar için kullanılabilir. Daha fazla bilgi için bkz . CREATE EXTERNAL DATA SOURCE ve CREATE EXTERNAL FILE FORMAT (Transact-SQL).
Neden dosyalarının ve veri dosyalarının her ikisi de CTAS deyimiyle ilişkilendirilmiş queryID sahiptir. Veriler ve nedeni ayrı dosyalarda olduğundan, ilgili dosyaların eşleşen bir son eki vardır.
İzinler
Bu kullanıcı izinlerini gerektirir:
- TABLO OLUŞTUR
- ŞEMA DEĞIŞTIRME
- DıŞ VERI KAYNAĞı DEĞIŞTIRME
- ALTER ANY EXTERNAL FILE FORMAT (yalnızca Hadoop ve Azure Depolama dış veri kaynakları için geçerlidir)
- CONTROL DATABASE (yalnızca Hadoop ve Azure Depolama dış veri kaynakları için geçerlidir)
CREATE EXTERNAL TABLE komutunda kullanılan DATABASE SCOPED CREDENTIAL içinde belirtilen uzak oturum açma bilgilerinin LOCATION parametresinde belirtilen dış veri kaynağındaki yol/tablo/koleksiyon için Okuma iznine sahip olması gerektiğini unutmayın. Hadoop veya Azure Depolama dış veri kaynağına veri aktarmak için bu EXTERNAL TABLE'yu kullanmayı planlıyorsanız, belirtilen oturum açma bilgilerinin LOCATION'da belirtilen yolda yazma izni olması gerekir. Hadoop, SQL Server 2022'de (16.x) desteklenmez.
Azure Blob Depolama için, Azure portalında, Azure Blob Depolama veya ADLS 2. Nesil depolama hesaplarında erişim anahtarlarını ve paylaşılan erişim imzasını (SAS) yapılandırırken, İzin Verilen izinler en az Okuma ve Yazma izinleri vermek üzere yapılandırın. Klasörler arasında arama yaparken Liste izni de gerekebilir. Ayrıca, izin verilen kaynak türleri olarak hem kapsayıcı
Önemli
ALTER ANY EXTERNAL DATA SOURCE izni, herhangi bir sorumluya herhangi bir dış veri kaynağı nesnesi oluşturma ve değiştirme olanağı verir ve bu nedenle, veritabanındaki tüm veritabanı kapsamlı kimlik bilgilerine erişme olanağı da verir. Bu izin yüksek ayrıcalıklı olarak kabul edilmeli ve bu nedenle yalnızca sistemdeki güvenilir sorumlulara verilmelidir.
Hata işleme
CREATE EXTERNAL TABLE deyimi yürütülürken PolyBase dış veri kaynağına bağlanmayı dener. Bağlanma girişimi başarısız olursa, deyimi başarısız olur ve dış tablo oluşturulmaz. PolyBase, sorguyu başarısız olmadan önce bağlantıyı yeniden denemesi nedeniyle komutun başarısız olması bir dakika veya daha fazla sürebilir.
Açıklamalar
gibi SELECT FROM EXTERNAL TABLEgeçici sorgu senaryolarında PolyBase, dış veri kaynağından alınan satırları geçici bir tabloda depolar. Sorgu tamamlandıktan sonra PolyBase geçici tabloyu kaldırır ve siler. SQL tablolarında kalıcı veri depolanmaz.
Buna karşılık, dış TABLODAN SEÇ gibi içeri aktarma senaryosunda PolyBase, dış veri kaynağından alınan satırları SQL tablosunda kalıcı veri olarak depolar. PolyBase dış verileri aldığında sorgu yürütme sırasında yeni tablo oluşturulur.
PolyBase, sorgu performansını geliştirmek için sorgu hesaplamalarının bir bölümünü Hadoop'a gönderebilir. Bu eyleme koşul gönderimi adı verilir. Etkinleştirmek için , CREATE EXTERNAL DATA SOURCE (Transact-SQL) alanında Hadoop resource manager konum seçeneğini belirtin.
Aynı veya farklı dış veri kaynaklarına başvuran birçok dış tablo oluşturabilirsiniz.
Sınırlama
Dış tablonun verileri SQL Server'ın doğrudan yönetim denetimi altında olmadığından, herhangi bir zamanda bir dış işlem tarafından değiştirilebilir veya kaldırılabilir. Sonuç olarak, dış tablodaki sorgu sonuçlarının belirleyici olması garanti edilmez. Aynı sorgu, bir dış tabloda her çalıştırıldığında farklı sonuçlar döndürebilir. Benzer şekilde, dış veriler taşınır veya kaldırılırsa sorgu başarısız olabilir.
Her birinin farklı dış veri kaynaklarına başvuracağı birden çok dış tablo oluşturabilirsiniz. Farklı Hadoop veri kaynaklarında aynı anda sorgu çalıştırırsanız, her Hadoop kaynağı aynı 'hadoop bağlantısı' sunucu yapılandırma ayarını kullanmalıdır. Örneğin, cloudera Hadoop kümesine ve Hortonworks Hadoop kümesine karşı aynı anda sorgu çalıştıramazsınız çünkü bunlar farklı yapılandırma ayarları kullanır. Yapılandırma ayarları ve desteklenen birleşimler için bkz . PolyBase bağlantı yapılandırması (Transact-SQL).
Dış tablo veri türü olarak DELIMITEDTEXT, CSV, PARQUETveya DELTA kullandığında, dış tablolar CREATE STATISTICS komut başına yalnızca bir sütun için istatistikleri destekler.
Dış tablolarda yalnızca bu Veri Tanımı Dili (DDL) deyimlerine izin verilir:
-
CREATE TABLEveDROP TABLE -
CREATE STATISTICSveDROP STATISTICS -
CREATE VIEWveDROP VIEW
Yapılar ve işlemler desteklenmez:
-
DEFAULTDış tablo sütunlarında kısıtlama - Veri İşleme Dili (DML) silme, ekleme ve güncelleştirme işlemleri
Sorgu sınırlamaları
PolyBase, 32 eşzamanlı PolyBase sorgusu çalıştırırken klasör başına en fazla 33k dosya kullanabilir. Bu maksimum sayı, her HDFS klasöründeki hem dosyaları hem de alt klasörleri içerir. Eşzamanlılık derecesi 32'den azsa, bir kullanıcı HDFS'de 33k'tan fazla dosya içeren klasörlerde PolyBase sorguları çalıştırabilir. Dış dosya yollarını kısa tutmanızı ve HDFS klasörü başına en fazla 30k dosya kullanmanızı öneririz. Çok fazla dosyaya başvurulduğunda, java sanal makinesi (JVM) yetersiz bellek özel durumu oluşabilir.
Tablo genişliği sınırlamaları
SQL Server 2016'da PolyBase, tablo tanımına göre tek bir geçerli satırın boyut üst sınırına göre 32 KB satır genişliği sınırına sahiptir. Sütun şemasının toplamı 32 KB'tan büyükse PolyBase verileri sorgulayamaz.
Veri türü sınırlamaları
Aşağıdaki veri türleri PolyBase dış tablolarında kullanılamaz:
- coğrafya
- geometri
- hierarchyid
- resim
- Metin
- ntext
- xml
- Kullanıcı tanımlı herhangi bir tür
Veri kaynağına özgü sınırlamalar
Oracle
Oracle eş anlamlıları PolyBase ile kullanım için desteklenmez.
Diziler içeren MongoDB koleksiyonlarına dış tablolar
Diziler içeren MongoDB koleksiyonlarına dış tablolar oluşturmak için, MongoDB için PolyBase ODBC Sürücüsü tarafından algılanan şemayı temel alan bir CREATE EXTERNAL TABLE deyimi oluşturmak üzere Azure Data Studio için sp_data_source_table_columns saklı yordamı, MongoDB sürücüsü için PolyBase ODBC Sürücüsü aracılığıyla da otomatik olarak düzleştirme gerçekleştirir. Azure Data Studio için Veri Sanallaştırma uzantısı ve sp_data_source_table_columns dış şemayı sorgulamak için aynı iç saklı yordamları kullanır.
Kilitleme
SCHEMARESOLUTION nesnesinde paylaşılan kilit.
Güvenlik
Dış tablonun veri dosyaları Hadoop veya Azure Blob Depolama'da depolanır. Bu veri dosyaları kendi işlemleriniz tarafından oluşturulur ve yönetilir. Dış verilerin güvenliğini yönetmek sizin sorumluluğunuzdadır.
Örnekler
A. Metinle ayrılmış biçimde veri içeren bir dış tablo oluşturma
Bu örnekte, metinle ayrılmış dosyalarda biçimlendirilmiş veriler içeren bir dış tablo oluşturmak için gereken tüm adımlar gösterilir. bir dış veri kaynağı mydatasource ve myfileformatbir dış dosya biçimi tanımlar. Bu veritabanı düzeyindeki nesnelere daha sonra CREATE EXTERNAL TABLE deyiminde başvurulur. Daha fazla bilgi için bkz . CREATE EXTERNAL DATA SOURCE (Transact-SQL) ve CREATE EXTERNAL FILE FORMAT (Transact-SQL).
CREATE EXTERNAL DATA SOURCE mydatasource
WITH (
TYPE = HADOOP,
LOCATION = 'hdfs://xxx.xxx.xxx.xxx:8020'
)
CREATE EXTERNAL FILE FORMAT myfileformat
WITH (
FORMAT_TYPE = DELIMITEDTEXT,
FORMAT_OPTIONS (FIELD_TERMINATOR ='|')
);
CREATE EXTERNAL TABLE ClickStream (
url varchar(50),
event_date date,
user_IP varchar(50)
)
WITH (
LOCATION='/webdata/employee.tbl',
DATA_SOURCE = mydatasource,
FILE_FORMAT = myfileformat
)
;
B. RCFile biçiminde verilerle dış tablo oluşturma
Bu örnekte, RCFiles olarak biçimlendirilmiş veriler içeren bir dış tablo oluşturmak için gereken tüm adımlar gösterilmektedir. bir dış veri kaynağı mydatasource_rc ve myfileformat_rcbir dış dosya biçimi tanımlar. Bu veritabanı düzeyindeki nesnelere daha sonra CREATE EXTERNAL TABLE deyiminde başvurulur. Daha fazla bilgi için bkz . CREATE EXTERNAL DATA SOURCE (Transact-SQL) ve CREATE EXTERNAL FILE FORMAT (Transact-SQL).
CREATE EXTERNAL DATA SOURCE mydatasource_rc
WITH (
TYPE = HADOOP,
LOCATION = 'hdfs://xxx.xxx.xxx.xxx:8020'
)
CREATE EXTERNAL FILE FORMAT myfileformat_rc
WITH (
FORMAT_TYPE = RCFILE,
SERDE_METHOD = 'org.apache.hadoop.hive.serde2.columnar.LazyBinaryColumnarSerDe'
)
;
CREATE EXTERNAL TABLE ClickStream_rc (
url varchar(50),
event_date date,
user_ip varchar(50)
)
WITH (
LOCATION='/webdata/employee_rc.tbl',
DATA_SOURCE = mydatasource_rc,
FILE_FORMAT = myfileformat_rc
)
;
C. ORC biçiminde verilerle dış tablo oluşturma
Bu örnekte, ORC dosyaları olarak biçimlendirilmiş veriler içeren bir dış tablo oluşturmak için gereken tüm adımlar gösterilir. bir dış veri kaynağı mydatasource_orc ve myfileformat_orcbir dış dosya biçimi tanımlar. Bu veritabanı düzeyindeki nesnelere daha sonra CREATE EXTERNAL TABLE deyiminde başvurulur. Daha fazla bilgi için bkz . CREATE EXTERNAL DATA SOURCE (Transact-SQL) ve CREATE EXTERNAL FILE FORMAT (Transact-SQL).
CREATE EXTERNAL DATA SOURCE mydatasource_orc
WITH (
TYPE = HADOOP,
LOCATION = 'hdfs://xxx.xxx.xxx.xxx:8020'
)
CREATE EXTERNAL FILE FORMAT myfileformat_orc
WITH (
FORMAT = ORC,
COMPRESSION = 'org.apache.hadoop.io.compress.SnappyCodec'
)
;
CREATE EXTERNAL TABLE ClickStream_orc (
url varchar(50),
event_date date,
user_ip varchar(50)
)
WITH (
LOCATION='/webdata/',
DATA_SOURCE = mydatasource_orc,
FILE_FORMAT = myfileformat_orc
)
;
D. Hadoop verilerini sorgulama
ClickStream, Hadoop kümesindeki sınırlandırılmış employee.tbl metin dosyasına bağlanan bir dış tablodur. Aşağıdaki sorgu, standart tablodaki bir sorguya benzer. Ancak bu sorgu Hadoop'tan veri alır ve sonuçları hesaplar.
SELECT TOP 10 (url) FROM ClickStream WHERE user_ip = 'xxx.xxx.xxx.xxx';
E. Hadoop verilerini SQL verileriyle birleştirme
Bu sorgu, iki SQL tablosu üzerinde standart bir JOIN gibi görünür. Fark, PolyBase'in Hadoop'tan tıklama akışı verilerini alıp UrlDescription tablosuna birleştirmesidir. Tablolardan biri dış tablo, diğeri standart sql tablosudur.
SELECT url.description
FROM ClickStream cs
JOIN UrlDescription url ON cs.url = url.name
WHERE cs.url = 'msdn.microsoft.com';
F. Hadoop'tan SQL tablosuna veri aktarma
Bu örnek, standart SQL tablosu ms_user ile dış tablo userarasında birleştirmenin sonucunu kalıcı olarak depolayan yeni bir SQL tablosu ClickStream oluşturur.
SELECT DISTINCT user.FirstName, user.LastName
INTO ms_user
FROM user INNER JOIN (
SELECT * FROM ClickStream WHERE cs.url = 'www.microsoft.com'
) AS ms
ON user.user_ip = ms.user_ip;
G. SQL Server için dış tablo oluşturma
Veritabanı kapsamlı bir kimlik bilgisi oluşturmadan önce, kullanıcı veritabanının kimlik bilgilerini korumak için bir ana anahtarı olmalıdır. Daha fazla bilgi için bkz . CREATE MASTER KEY (Transact-SQL) ve CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).
-- Create a Master Key
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'S0me!nfo';
GO
/* specify credentials to external data source
* IDENTITY: user name for external source.
* SECRET: password for external source.
*/
CREATE DATABASE SCOPED CREDENTIAL SqlServerCredentials
WITH IDENTITY = 'username', Secret = 'password';
GO
SQLServerInstanceadlı yeni bir dış veri kaynağı ve sqlserver.customeradlı dış tablo oluşturun:
/* LOCATION: Location string should be of format '<vendor>://<server>[:<port>]'.
* PUSHDOWN: specify whether computation should be pushed down to the source. ON by default.
* CREDENTIAL: the database scoped credential, created above.
*/
CREATE EXTERNAL DATA SOURCE SQLServerInstance
WITH (
LOCATION = 'sqlserver://SqlServer',
-- PUSHDOWN = ON | OFF,
CREDENTIAL = SQLServerCredentials
);
GO
CREATE SCHEMA sqlserver;
GO
/* LOCATION: sql server table/view in 'database_name.schema_name.object_name' format
* DATA_SOURCE: the external data source, created above.
*/
CREATE EXTERNAL TABLE sqlserver.customer(
C_CUSTKEY INT NOT NULL,
C_NAME VARCHAR(25) NOT NULL,
C_ADDRESS VARCHAR(40) NOT NULL,
C_NATIONKEY INT NOT NULL,
C_PHONE CHAR(15) NOT NULL,
C_ACCTBAL DECIMAL(15,2) NOT NULL,
C_MKTSEGMENT CHAR(10) NOT NULL,
C_COMMENT VARCHAR(117) NOT NULL
)
WITH (
LOCATION='tpch_10.dbo.customer',
DATA_SOURCE=SqlServerInstance
);
Ben. Oracle için dış tablo oluşturma
-- Create a Master Key
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'password';
/*
* Specify credentials to external data source
* IDENTITY: user name for external source.
* SECRET: password for external source.
*/
CREATE DATABASE SCOPED CREDENTIAL credential_name
WITH IDENTITY = 'username', Secret = 'password';
/*
* LOCATION: Location string should be of format '<vendor>://<server>[:<port>]'.
* PUSHDOWN: specify whether computation should be pushed down to the source. ON by default.
* CONNECTION_OPTIONS: Specify driver location
* CREDENTIAL: the database scoped credential, created above.
*/
CREATE EXTERNAL DATA SOURCE external_data_source_name
WITH (
LOCATION = 'oracle://<server address>[:<port>]',
-- PUSHDOWN = ON | OFF,
CREDENTIAL = credential_name)
/*
* LOCATION: Oracle table/view in '<database_name>.<schema_name>.<object_name>' format. Note this may be case sensitive in the Oracle database.
* DATA_SOURCE: the external data source, created above.
*/
CREATE EXTERNAL TABLE customers(
[O_ORDERKEY] DECIMAL(38) NOT NULL,
[O_CUSTKEY] DECIMAL(38) NOT NULL,
[O_ORDERSTATUS] CHAR COLLATE Latin1_General_BIN NOT NULL,
[O_TOTALPRICE] DECIMAL(15,2) NOT NULL,
[O_ORDERDATE] DATETIME2(0) NOT NULL,
[O_ORDERPRIORITY] CHAR(15) COLLATE Latin1_General_BIN NOT NULL,
[O_CLERK] CHAR(15) COLLATE Latin1_General_BIN NOT NULL,
[O_SHIPPRIORITY] DECIMAL(38) NOT NULL,
[O_COMMENT] VARCHAR(79) COLLATE Latin1_General_BIN NOT NULL
)
WITH (
LOCATION='DB1.mySchema.customer',
DATA_SOURCE= external_data_source_name
);
J. Teradata için dış tablo oluşturma
-- Create a Master Key
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'password';
/*
* Specify credentials to external data source
* IDENTITY: user name for external source.
* SECRET: password for external source.
*/
CREATE DATABASE SCOPED CREDENTIAL credential_name
WITH IDENTITY = 'username', Secret = 'password';
/* LOCATION: Location string should be of format '<vendor>://<server>[:<port>]'.
* PUSHDOWN: specify whether computation should be pushed down to the source. ON by default.
* CONNECTION_OPTIONS: Specify driver location
* CREDENTIAL: the database scoped credential, created above.
*/
CREATE EXTERNAL DATA SOURCE external_data_source_name
WITH (
LOCATION = teradata://<server address>[:<port>],
-- PUSHDOWN = ON | OFF,
CREDENTIAL =credential_name
);
/* LOCATION: Teradata table/view in '<database_name>.<object_name>' format
* DATA_SOURCE: the external data source, created above.
*/
CREATE EXTERNAL TABLE customer(
L_ORDERKEY INT NOT NULL,
L_PARTKEY INT NOT NULL,
L_SUPPKEY INT NOT NULL,
L_LINENUMBER INT NOT NULL,
L_QUANTITY DECIMAL(15,2) NOT NULL,
L_EXTENDEDPRICE DECIMAL(15,2) NOT NULL,
L_DISCOUNT DECIMAL(15,2) NOT NULL,
L_TAX DECIMAL(15,2) NOT NULL,
L_RETURNFLAG CHAR NOT NULL,
L_LINESTATUS CHAR NOT NULL,
L_SHIPDATE DATE NOT NULL,
L_COMMITDATE DATE NOT NULL,
L_RECEIPTDATE DATE NOT NULL,
L_SHIPINSTRUCT CHAR(25) NOT NULL,
L_SHIPMODE CHAR(10) NOT NULL,
L_COMMENT VARCHAR(44) NOT NULL
)
WITH (
LOCATION='customer',
DATA_SOURCE= external_data_source_name
);
K. MongoDB için dış tablo oluşturma
-- Create a Master Key
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'password';
/*
* Specify credentials to external data source
* IDENTITY: user name for external source.
* SECRET: password for external source.
*/
CREATE DATABASE SCOPED CREDENTIAL credential_name
WITH IDENTITY = 'username', Secret = 'password';
/* LOCATION: Location string should be of format '<type>://<server>[:<port>]'.
* PUSHDOWN: specify whether computation should be pushed down to the source. ON by default.
* CONNECTION_OPTIONS: Specify driver location
* CREDENTIAL: the database scoped credential, created above.
*/
CREATE EXTERNAL DATA SOURCE external_data_source_name
WITH (
LOCATION = mongodb://<server>[:<port>],
-- PUSHDOWN = ON | OFF,
CREDENTIAL = credential_name
);
/* LOCATION: MongoDB table/view in '<database_name>.<schema_name>.<object_name>' format
* DATA_SOURCE: the external data source, created above.
*/
CREATE EXTERNAL TABLE customers(
[O_ORDERKEY] DECIMAL(38) NOT NULL,
[O_CUSTKEY] DECIMAL(38) NOT NULL,
[O_ORDERSTATUS] CHAR COLLATE Latin1_General_BIN NOT NULL,
[O_TOTALPRICE] DECIMAL(15,2) NOT NULL,
[O_ORDERDATE] DATETIME2(0) NOT NULL,
[O_COMMENT] VARCHAR(79) COLLATE Latin1_General_BIN NOT NULL
)
WITH (
LOCATION='customer',
DATA_SOURCE= external_data_source_name
);
L. Dış tablo aracılığıyla S3 uyumlu nesne depolamayı sorgulama
Şunlar için geçerlidir: SQL Server 2022 (16.x) ve üzeri
Aşağıdaki örnek, dış tabloyu sorgulayarak S3 uyumlu nesne depolama alanında depolanan bir parquet dosyasını sorgulamak için T-SQL'in kullanılmasını gösterir. Örnek, dış veri kaynağı içinde göreli bir yol kullanır.
CREATE EXTERNAL DATA SOURCE s3_ds
WITH
( LOCATION = 's3://<ip_address>:<port>/'
, CREDENTIAL = s3_dc
);
GO
CREATE EXTERNAL FILE FORMAT ParquetFileFormat WITH(FORMAT_TYPE = PARQUET);
GO
CREATE EXTERNAL TABLE Region(
r_regionkey BIGINT,
r_name CHAR(25),
r_comment VARCHAR(152) )
WITH (LOCATION = '/region/', DATA_SOURCE = 's3_ds',
FILE_FORMAT = ParquetFileFormat);
GO
İlgili içerik
- CREATE EXTERNAL DATA SOURCE (Transact-SQL)
- CREATE EXTERNAL FILE FORMAT (Transact-SQL)
- sp_data_source_objects (Transact-SQL)
- Azure Data Studio için
Veri Sanallaştırma uzantısı
SQL Server
* Azure SQL Veritabanı *
Azure SQL Yönetilen Örneği
Azure Synapse'i
Analiz
Genel Bakış: Azure SQL Veritabanı
Aşağıdakiler için kullanılan bir dış tablo oluşturur:
Ayrıca bkz . CREATE EXTERNAL DATA SOURCE (Transact-SQL).
Sözdizimi
Veri sanallaştırma (önizleme) ile kullanım için
CREATE EXTERNAL TABLE { database_name.schema_name.table_name | schema_name.table_name | table_name }
( <column_definition> [ ,...n ] )
WITH (
LOCATION = 'filepath',
DATA_SOURCE = external_data_source_name,
FILE_FORMAT = external_file_format_name
)
[;]
<column_definition> ::=
column_name <data_type>
[ COLLATE collation_name ]
[ NULL | NOT NULL ]
Elastik sorgularla kullanmak için (önizleme):
-- Create a table for use with elastic query
CREATE EXTERNAL TABLE { database_name.schema_name.table_name | schema_name.table_name | table_name }
( <column_definition> [ ,...n ] )
WITH ( <sharded_external_table_options> )
[;]
<column_definition> ::=
column_name <data_type>
[ COLLATE collation_name ]
[ NULL | NOT NULL ]
<sharded_external_table_options> ::=
DATA_SOURCE = external_data_source_name,
SCHEMA_NAME = N'nonescaped_schema_name',
OBJECT_NAME = N'nonescaped_object_name',
[DISTRIBUTION = SHARDED(sharding_column_name) | REPLICATED | ROUND_ROBIN]]
)
[;]
Bağımsız değişken
{ database_name.schema_name.table_name | schema_name.table_name | table_name }
Oluşturulacak tablonun bir ile üç bölümlü adı.
Dış tablo için, SQL yalnızca tablo meta verilerini ve Azure SQL Veritabanı'nda başvuruda bulunılan dosya veya klasörle ilgili temel istatistikleri depolar. Dış tablolar oluşturulduğunda Azure SQL Veritabanı'nda hiçbir gerçek veri taşınmaz veya depolanmaz.
Önemli
En iyi performans için, dış veri kaynağı sürücüsü üç bölümlü bir adı destekliyorsa, üç bölümlü adın sağlanması kesinlikle önerilir.
< > column_definition [ ,... n ]
CREATE EXTERNAL TABLE sütun adını, veri türünü, null atanabilirliği ve harmanlamayı yapılandırma özelliğini destekler. öğesini dış tablolarda kullanamazsınız DEFAULT CONSTRAINT . Bu veri türleri, Azure SQL Veritabanı'nın dış tablolarındaki sütunlar için desteklenmez:
- coğrafya
- geometri
- hierarchyid
- resim
- Metin
- ntext
- xml
- json
Veri türleri ve sütun sayısı dahil olmak üzere sütun tanımlarının dış dosyalardaki verilerle eşleşmesi gerekir. Uyuşmazlık varsa, gerçek veriler sorgulandığında dosya satırları reddedilir.
Parçalı dış tablo seçenekleri
Elastik sorguiçin dış veri kaynağını (SQL Server olmayan bir veri kaynağı) ve bir dağıtım yöntemini belirtir.
LOCATION = 'folder_or_filepath'
Azure Data Lake 2. Nesil veya Azure Blob Depolama'daki gerçek veriler için klasörü veya dosya yolunu ve dosya adını belirtir. Konum kök klasörden başlar. Kök klasör, dış veri kaynağında belirtilen veri konumudur.
CREATE EXTERNAL TABLE yolu ve klasörü oluşturmaz.
Bir klasör olmasını belirtirseniz LOCATION , dış tablodan seçen bir sorgu klasördeki dosyaları alır, ancak tüm alt klasörlerini alamaz.
Azure SQL Yönetilen Örneği, alt klasörlerdeki veya gizli klasörlerdeki dosyaları bulamıyor. Ayrıca, dosya adının altı çizili (_) veya nokta (.) ile başladığı dosyaları döndürmez.
Aşağıdaki görüntü örneğinde, LOCATION='/webdata/'bir sorgu mydata.txt'den satır döndürür. Bir alt klasörde olduğundan mydata2.txt döndürmez, gizli bir klasörde olduğundan mydata3.txt döndürmez ve gizli bir dosya olduğundan _hidden.txt döndürmez.
VERİ_KAYNAĞI
DATA_SOURCE, dış verilerin konumunu içeren dış veri kaynağının adını belirtir. Dış veri kaynağı oluşturmak için CREATE EXTERNAL DATA SOURCE (Transact-SQL) kullanın. Elastik sorgudaki DATA_SOURCE bir örnek için parça eşlemesi, bkz. Dış tablolar oluşturma.
FILE_FORMAT = external_file_format_name
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 FORMAT (Transact-SQL) kullanın.
SCHEMA_NAME ve OBJECT_NAME
Yalnızca elastik sorgu ile kullanım için.
SCHEMA_NAME ve OBJECT_NAME yan tümceleri dış tablo tanımını farklı bir şemadaki bir tabloyla eşler. Atlanırsa, uzak nesnenin şemasının olduğu varsayılır dbo ve adının tanımlanan dış tablo adıyla aynı olduğu varsayılır. Bu, uzak tablonuzun adı dış tabloyu oluşturmak istediğiniz veritabanında zaten alınmışsa kullanışlıdır. Örneğin, ölçeklendirilen veri katmanınızdaki katalog görünümlerinin veya DMV'lerin toplam görünümünü almak için bir dış tablo tanımlamak istiyorsunuz. Katalog görünümleri ve DMV'ler zaten yerel olarak mevcut olduğundan, dış tablo tanımı için adlarını kullanamazsınız. Bunun yerine farklı bir ad kullanın ve SCHEMA_NAME ve/veya OBJECT_NAME yan tümcelerinde katalog görünümünün veya DMV'nin adını kullanın. Bir örnek için bkz. dış tablo oluşturma
DAĞITIM
Yalnızca elastik sorgu ile kullanım için.
Opsiyonel. Bu bağımsız değişken yalnızca türü SHARD_MAP_MANAGERveritabanları için gereklidir. Bu bağımsız değişken, bir tablonun parçalanmış tablo olarak mı yoksa çoğaltılmış tablo olarak mı ele alındığını denetler. Tablolarda SHARDED (<column name>) , farklı tablolardaki veriler çakışmaz.
REPLICATED tabloların her parçada aynı verilere sahip olduğunu belirtir.
ROUND_ROBIN , verileri dağıtmak için uygulamaya özgü bir yöntemin kullanıldığını gösterir.
DISTRIBUTION yan tümcesi, bu tablo için kullanılan veri dağıtımını belirtir. Sorgu işlemcisi, en verimli sorgu planlarını oluşturmak için DISTRIBUTION yan tümcesinde sağlanan bilgileri kullanır.
-
SHARDED, verilerin veritabanları arasında yatay olarak bölümlendiği anlamına gelir. Veri dağıtımı için bölümleme anahtarısharding_column_nameparametresidir. -
REPLICATED, tablonun özdeş kopyalarının her veritabanında mevcut olduğu anlamına gelir. Çoğaltmaların veritabanlarında aynı olduğundan emin olmak sizin sorumluluğunuzdadır. -
ROUND_ROBIN, tablonun uygulamaya bağımlı bir dağıtım yöntemi kullanılarak yatay olarak bölümlendiği anlamına gelir.
İzinler
Dış tabloya erişimi olan kullanıcılar, dış veri kaynağı tanımında verilen kimlik bilgileri altında temel alınan uzak tablolara otomatik olarak erişim kazanır. Dış veri kaynağının kimlik bilgileri aracılığıyla ayrıcalıkların istenmeyen şekilde yükseltilmesini önleyebilirsiniz. Normal bir tablo gibi dış tablo için GRANT veya REVOKE kullanın. Dış veri kaynağınızı ve dış tablolarınızı tanımladıktan sonra, artık dış tablolarınız üzerinde tam T-SQL kullanabilirsiniz.
CREATE EXTERNAL TABLE şu kullanıcı izinlerini gerektirir:
- TABLO OLUŞTUR
- ŞEMA DEĞIŞTIRME
- DıŞ VERI KAYNAĞı DEĞIŞTIRME
- HERHANGI BIR DıŞ DOSYA BIÇIMINI DEĞIŞTIRME
- CONTROL DATABASE izinleri yalnızca ana anahtarı, veritabanı kapsamlı kimlik bilgilerini ve dış veri kaynağını oluşturmak için gereklidir.
Dış veri kaynağını oluşturan oturum açma bilgilerinin Hadoop veya Azure Blob Depolama'da bulunan dış veri kaynağını okuma ve yazma iznine sahip olması gerektiğini unutmayın.
Önemli
ALTER ANY EXTERNAL DATA SOURCE izni, herhangi bir sorumluya herhangi bir dış veri kaynağı nesnesi oluşturma ve değiştirme olanağı verir ve bu nedenle, veritabanındaki tüm veritabanı kapsamlı kimlik bilgilerine erişme olanağı da verir. Bu izin yüksek ayrıcalıklı olarak kabul edilmeli ve bu nedenle yalnızca sistemdeki güvenilir sorumlulara verilmelidir.
Kilitleme
SCHEMARESOLUTION nesnesinde paylaşılan kilit.
Açıklamalar
gibi SELECT FROM EXTERNAL TABLEgeçici sorgu senaryolarında, dış veri kaynağından alınan satırlar geçici bir tabloda depolanır. Sorgu tamamlandıktan sonra satırlar kaldırılır ve geçici tablo silinir. SQL tablolarında kalıcı veri depolanmaz.
Buna karşılık, dış TABLODAN SEÇ gibi içeri aktarma senaryosunda, dış veri kaynağından alınan satırlar SQL tablosunda kalıcı veri olarak depolanır. Yeni tablo, dış veriler alındığında sorgu yürütme sırasında oluşturulur.
Şu anda Azure SQL Veritabanı ile veri sanallaştırması yalnızca okuma modundadır.
Aynı veya farklı dış veri kaynaklarına başvuran birçok dış tablo oluşturabilirsiniz.
Tablo genişliği sınırlamaları
1 MB satır genişliği sınırı, tablo tanımına göre tek bir geçerli satırın en büyük boyutuna bağlıdır. Sütun şemasının toplamı 1 MB'tan büyükse veri sanallaştırma sorguları başarısız olur.
Hata işleme
CREATE EXTERNAL TABLE deyimi yürütülürken bağlanma girişimi başarısız olursa, deyimi başarısız olur ve dış tablo oluşturulmaz. SQL Veritabanı, sorguyu başarısız olmadan önce bağlantıyı yeniden denemesi nedeniyle komutun başarısız olması bir dakika veya daha fazla sürebilir.
Sınırlama
Dış tablonun verileri Veritabanı Altyapısı veya Azure SQL Veritabanı'nın doğrudan yönetim denetimi altında olmadığından, herhangi bir zamanda bir dış işlem tarafından değiştirilebilir veya kaldırılabilir. Sonuç olarak, dış tablodaki sorgu sonuçlarının belirleyici olması garanti edilmez. Aynı sorgu, bir dış tabloda her çalıştırıldığında farklı sonuçlar döndürebilir. Benzer şekilde, dış veriler taşınır veya kaldırılırsa sorgu başarısız olabilir.
Her birinin farklı dış veri kaynaklarına başvuracağı birden çok dış tablo oluşturabilirsiniz.
Dış tablolarda yalnızca bu Veri Tanımı Dili (DDL) deyimlerine izin verilir:
-
CREATE TABLEveDROP TABLE -
CREATE STATISTICSveDROP STATISTICS -
CREATE VIEWveDROP VIEW
Yapılar ve işlemler desteklenmez:
-
DEFAULTDış tablo sütunlarında kısıtlama. - Veri İşleme Dili (DML) silme, ekleme ve güncelleştirme işlemleri.
Elastik sorguyla ilgili sınırlamalar
Yalıtım semantiği: Dış tablo aracılığıyla verilere erişim, SQL Server içindeki yalıtım semantiğine bağlı değildir. Bu, dış tabloyu sorgulamanın herhangi bir kilitleme veya anlık görüntü yalıtımı uygulamadığı anlamına gelir. Bu nedenle, dış veri kaynağındaki veriler değişiyorsa veri döndürme değişebilir. Aynı sorgu, bir dış tabloda her çalıştırıldığında farklı sonuçlar döndürebilir. Benzer şekilde, dış veriler taşınır veya kaldırılırsa sorgu başarısız olabilir.
desteklenmeyen yapılar ve işlemler:
-
DEFAULTDış tablo sütunlarında kısıtlama. - Veri İşleme Dili (DML) silme, ekleme ve güncelleştirme işlemleri.
- Dış tablo sütunlarında dinamik veri maskeleme.
- İmleçler, Azure SQL Veritabanı'ndaki dış tablolar için desteklenmez.
-
Yalnızca sabit koşul: Yalnızca sorguda tanımlanan değişmez değer koşullarını dış veri kaynağına gönderebilirsiniz. Bu, bağlı sunuculardan farklı bir durumdur ve sorgu yürütme sırasında belirlenen önkoşulların kullanılabildiği yerlere, yani sorgu planında iç içe döngüyle kullanıldığında erişim sağlar. Bu durum genellikle dış tablonun tamamının yerel olarak kopyalanmasına ve sonra birleştirilmesine neden olur.
Aşağıdaki örnekte,
External.Ordersbir dış tablo veCustomeryerel bir tabloysa, gerekli koşul derleme zamanında bilinmediğinden sorgu dış tablonun tamamını yerel olarak kopyalar.SELECT Orders.OrderId, Orders.OrderTotal FROM External.Orders WHERE CustomerId IN ( SELECT TOP 1 CustomerId FROM Customer WHERE CustomerName = 'MyCompany' );Paralellikyok: Dış tabloların kullanılması sorgu planında paralellik kullanımını engeller.
Uzak sorgu olarak yürütüldü: Dış tablolar uzak sorgu olarak uygulandığından, döndürülen tahmini satır sayısı genel olarak 1000'dir. Dış tabloyu filtrelemek için kullanılan koşul türüne göre başka kurallar da vardır. Bunlar, dış tablodaki gerçek verilere dayalı tahminler yerine kural tabanlı tahminlerdir. İyileştirici, daha doğru bir tahmin elde etmek için uzak veri kaynağına erişmez.
Özel uç noktaiçin desteklenmez: Uzak tabloya bağlantı özel bir uç nokta olduğunda dış tablo sorguları desteklenmez.
Veri türü sınırlamaları
Aşağıdaki veri türleri dış tablolarda kullanılamaz:
- coğrafya
- geometri
- hierarchyid
- resim
- Metin
- ntext
- xml
- Kullanıcı tanımlı herhangi bir tür
Örnekler
Daha fazla örnek için bkz . CREATE EXTERNAL DATA SOURCE (Transact-SQL) veya bkz. Azure SQL Veritabanı ile veri sanallaştırma.
A. Elastik Sorgu için dış tablo oluşturma
CREATE EXTERNAL TABLE [dbo].[CustomerInformation]
( [CustomerID] [int] NOT NULL,
[CustomerName] [varchar](50) NOT NULL,
[Company] [varchar](50) NOT NULL)
WITH
( DATA_SOURCE = MyElasticDBQueryDataSrc)
B. Parçalanmış veri kaynağı için dış tablo oluşturma
Bu örnek, SCHEMA_NAME ve OBJECT_NAME yan tümcelerini kullanarak uzak DMV'yi bir dış tabloyla yeniden eşler.
CREATE EXTERNAL TABLE [dbo].[all_dm_exec_requests]([session_id] smallint NOT NULL,
[request_id] int NOT NULL,
[start_time] datetime NOT NULL,
[status] nvarchar(30) NOT NULL,
[command] nvarchar(32) NOT NULL,
[sql_handle] varbinary(64),
[statement_start_offset] int,
[statement_end_offset] int,
[cpu_time] int NOT NULL)
WITH
(
DATA_SOURCE = MyExtSrc,
SCHEMA_NAME = 'sys',
OBJECT_NAME = 'dm_exec_requests',
DISTRIBUTION=ROUND_ROBIN
);
C. Dış tabloyla Azure SQL Veritabanı'ndan dış verileri sorgulama
Azure SQL Veritabanı'nda veritabanı kapsamlı bir kimlik bilgisi oluşturmak için, veritabanı ana anahtarını (henüz yoksa) oluşturmanız gerekir. Kimlik bilgisi gerektirdiğinde bir veritabanı ana anahtarı gereklidir
SECRET.-- Create MASTER KEY if it doesn't exist in the database: CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<Some Very Strong Password Here>' GOSAS belirteci kullanarak veritabanı kapsamlı kimlik bilgilerini oluşturun. Yönetilen kimlik de kullanabilirsiniz.
CREATE DATABASE SCOPED CREDENTIAL MyCredential WITH IDENTITY = 'SHARED ACCESS SIGNATURE', SECRET = '<KEY>' ; --Removing leading '?' GOKimlik bilgilerini kullanarak dış veri kaynağını oluşturun.
--Create external data source pointing to the file path, and referencing database-scoped credential: CREATE EXTERNAL DATA SOURCE MyPrivateExternalDataSource WITH ( LOCATION = 'abs://public@pandemicdatalake.blob.core.windows.net/curated/covid-19/bing_covid-19_data/latest' CREDENTIAL = [MyCredential] ) GOVerileri yerel bir tablo gibi sorgulamak için BIR EXTERNAL FILE FORMAT ve external table oluşturun.
-- Or, create an EXTERNAL FILE FORMAT and an EXTERNAL TABLE --Create external file format CREATE EXTERNAL FILE FORMAT DemoFileFormat WITH ( FORMAT_TYPE=PARQUET ) GO --Create external table: CREATE EXTERNAL TABLE tbl_TaxiRides( vendorID VARCHAR(100) COLLATE Latin1_General_BIN2, tpepPickupDateTime DATETIME2, tpepDropoffDateTime DATETIME2, passengerCount INT, tripDistance FLOAT, puLocationId VARCHAR(8000), doLocationId VARCHAR(8000), startLon FLOAT, startLat FLOAT, endLon FLOAT, endLat FLOAT, rateCodeId SMALLINT, storeAndFwdFlag VARCHAR(8000), paymentType VARCHAR(8000), fareAmount FLOAT, extra FLOAT, mtaTax FLOAT, improvementSurcharge VARCHAR(8000), tipAmount FLOAT, tollsAmount FLOAT, totalAmount FLOAT ) WITH ( LOCATION = 'yellow/puYear=*/puMonth=*/*.parquet', DATA_SOURCE = NYCTaxiExternalDataSource, FILE_FORMAT = MyFileFormat ); GO --Then, query the data via an external table with T-SQL: SELECT TOP 10 * FROM tbl_TaxiRides; GO
İlgili içerik
SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
* Azure Synapse
Analiz *
Genel Bakış: Azure Synapse Analytics
Dış tablo kullanarak:
- Ayrılmış SQL havuzları Hadoop, Azure Blob Depolama ve Azure Data Lake Storage 1. Nesil ve 2. Nesil'den verileri sorgulayabilir, içeri aktarabilir ve depolayabilir.
- Sunucusuz SQL havuzları Azure Blob Depolama, Azure Data Lake Storage 1. Nesil ve 2. Nesil'den verileri sorgulayabilir, içeri aktarabilir ve depolayabilir. Sunucusuz
TYPE=Hadoopdesteklemez.
Ayrıca bkz . CREATE EXTERNAL DATA SOURCE (Transact-SQL) ve DROP EXTERNAL TABLE (Transact-SQL).
Azure Synapse ile dış tabloları kullanma hakkında daha fazla kılavuz ve örnek için bkz. Synapse SQLile dış tabloları kullanma
Sözdizimi
-
ayrılmış SQL havuzu
-
sunucusuz SQL havuzu
CREATE EXTERNAL TABLE { database_name.schema_name.table_name | schema_name.table_name | table_name }
( <column_definition> [ ,...n ] )
WITH (
LOCATION = 'hdfs_folder_or_filepath',
DATA_SOURCE = external_data_source_name,
FILE_FORMAT = external_file_format_name
[ , <reject_options> [ ,...n ] ]
)
[;]
<column_definition> ::=
column_name <data_type>
[ COLLATE collation_name ]
[ NULL | NOT NULL ]
<reject_options> ::=
{
| REJECT_TYPE = value | percentage,
| REJECT_VALUE = reject_value,
| REJECT_SAMPLE_VALUE = reject_sample_value,
| REJECTED_ROW_LOCATION = '/REJECT_Directory'
}
Bağımsız değişken
{ database_name.schema_name.table_name | schema_name.table_name | table_name }
Oluşturulacak tablonun bir ile üç bölümlü adı.
Dış tablo için yalnızca tablo meta verilerinin yanı sıra Azure Data Lake, Hadoop veya Azure Blob Depolama'da başvuruda bulunılan dosya veya klasörle ilgili temel istatistikler. Dış tablolar oluşturulduğunda hiçbir gerçek veri taşınmaz veya depolanmaz.
Önemli
En iyi performans için, dış veri kaynağı sürücüsü üç bölümlü bir adı destekliyorsa, üç bölümlü adın sağlanması kesinlikle önerilir.
< > column_definition [ ,... n ]
CREATE EXTERNAL TABLE sütun adını, veri türünü, null atanabilirliği ve harmanlamayı yapılandırma özelliğini destekler. Dış tablolarda DEFAULT CONSTRAINT komutunu kullanamazsınız.
Not
,
- Sınırlandırılmış dosyaları okurken, veri türleri ve sütun sayısı dahil olmak üzere sütun tanımlarının dış dosyalardaki verilerle eşleşmesi gerekir. Uyuşmazlık varsa, gerçek veriler sorgulanırken dosya satırları reddedilir.
- Parquet dosyalarından okurken, yalnızca okumak istediğiniz sütunları belirtebilir ve gerisini atlayabilirsiniz.
LOCATION = 'folder_or_filepath'
Azure Data Lake, Hadoop veya Azure Blob Depolama'daki gerçek veriler için klasörü veya dosya yolunu ve dosya adını belirtir. Konum kök klasörden başlar. Kök klasör, dış veri kaynağında belirtilen veri konumudur.
CREATE EXTERNAL TABLE AS SELECT (CETAS) (Transact-SQL) deyimi, yoksa yolu ve klasörü oluşturur.
CREATE EXTERNAL TABLE yolu ve klasörü oluşturmaz.
KLASÖR OLARAK KONUM belirtirseniz, dış tablodan seçen bir PolyBase sorgusu klasörden ve tüm alt klasörlerinden dosyaları alır. Tıpkı Hadoop gibi PolyBase de gizli klasörleri döndürmez. Ayrıca, dosya adının altı çizili (_) veya nokta (.) ile başladığı dosyaları döndürmez.
Aşağıdaki görüntü örneğinde, LOCATION='/webdata/'polyBase sorgusu mydata.txt ve mydata2.txtsatırlarını döndürür. Gizli bir klasörün alt klasöründe olduğundan mydata3.txt döndürmez. Gizli bir dosya olduğundan _hidden.txt döndürmez.
Hadoop dış tablolarından farklı olarak, yolun sonunda /** belirtmediğiniz sürece yerel dış tablolar alt klasörler döndürmez. Bu örnekte, LOCATION='/webdata/'sunucusuz bir SQL havuzu sorgusu mydata.txt'den satır döndürür. Bir alt klasörde bulunduğundan mydata2.txt ve mydata3.txt döndürmez. Hadoop tabloları herhangi bir alt klasör içindeki tüm dosyaları döndürür.
Hem Hadoop hem de yerel dış tablolar, alt çizgi (_) veya nokta (.) ile başlayan adlara sahip dosyaları atlar.
DATA_SOURCE = external_data_source_name
Dış verilerin konumunu içeren dış veri kaynağının adını belirtir. Bu konum Azure Data Lake'tedir. Dış veri kaynağı oluşturmak için CREATE EXTERNAL DATA SOURCE (Transact-SQL) kullanın.
FILE_FORMAT = external_file_format_name
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 FORMAT (Transact-SQL) kullanın.
TABLO_SEÇENEKLERİ
Temel alınan dosyaların nasıl okunduğunu açıklayan seçenek kümesini belirtir. Şu anda kullanılabilen tek seçenek, bazı tutarsız okuma işlemlerine neden olsa bile dış tabloya temel dosyalar üzerinde yapılan güncelleştirmeleri yoksaymasını belirten {"READ_OPTIONS":["ALLOW_INCONSISTENT_READS"]}. Bu seçeneği yalnızca sık dosya eklediğiniz özel durumlarda kullanın. Bu seçenek, CSV biçimi için sunucusuz SQL havuzunda kullanılabilir.
REDDET seçenekleri
Azure Synapse Analytics'te sunucusuz SQL havuzları için reddetme seçenekleri önizleme aşamasındadır.
Bu seçenek yalnızca TYPE = HADOOP olan dış veri kaynaklarında kullanılabilir.
PolyBase'in dış veri kaynağından kirli kayıtlarını nasıl işleyeceklerini belirleyen reddetme parametreleri belirtebilirsiniz. Gerçek veri türleri veya sütun sayısı dış tablonun sütun tanımlarıyla eşleşmiyorsa veri kaydı 'kirli' olarak kabul edilir.
Reddetme değerlerini belirtmediğinizde veya değiştirmediğinizde PolyBase varsayılan değerleri kullanır. CREATE EXTERNAL TABLE deyimiyle bir dış tablo oluşturduğunuzda reddetme parametreleriyle ilgili bu bilgiler ek meta veriler olarak depolanır. Gelecekte bir SELECT deyimi veya SELECT INTO SELECT deyimi dış tablodan veri seçtiğinde PolyBase, gerçek sorgu başarısız olmadan önce reddedilebilen satırların sayısını veya yüzdesini belirlemek için reddetme seçeneklerini kullanır. Reddetme eşiği aşılana kadar sorgu (kısmi) sonuçlar döndürür. Ardından uygun hata iletisiyle başarısız olur.
PARSER_VERSION biçimi seçeneği yalnızca sunucusuz SQL havuzlarında desteklenir.
REJECT_TYPE = değer | Yüzde
Seçeneğin REJECT_VALUE değişmez değer olarak mı yoksa yüzde olarak mı belirtildiğini açıklar.
değer
REJECT_VALUE yüzde değil değişmez değerdir. Reddedilen satır sayısı reject_valueaşıldığında PolyBase sorgusu başarısız olur.
Reddedilen satır sayısı reject_valueaşıldığında sorgu başarısız olur. Örneğin, if ve REJECT_VALUE = 5iseREJECT_TYPE = value, PolyBase SELECT sorgusu beş satır reddedildikten sonra başarısız olur.
yüzdesi
REJECT_VALUE sabit değer değil yüzde değeridir. Başarısız satırların yüzdesireject_valueaşıldığında PolyBase sorgusu başarısız olur. Başarısız satırların yüzdesi aralıklarla hesaplanır.
- için
REJECT_TYPE = value, reject_value 0 ile 2.147.483.647 arasında bir tamsayı olmalıdır. - için
REJECT_TYPE = percentagereject_value 0 ile 100 arasında bir float olmalıdır. Yüzde yalnızcaTYPE = HADOOPayrılmış SQL havuzları için geçerlidir.
REJECT_SAMPLE_VALUE = reject_sample_value
Belirttiğinizde REJECT_TYPE = percentagebu öznitelik gereklidir. PolyBase reddedilen satırların yüzdesini yeniden hesaplamadan önce alınmaya çalışacak satır sayısını belirler.
reject_sample_value parametresi 0 ile 2.147.483.647 arasında bir tamsayı olmalıdır.
Örneğin, polyBase REJECT_SAMPLE_VALUE = 1000dış veri dosyasından 1000 satırı içeri aktarma girişiminde bulunduktan sonra başarısız olan satırların yüzdesini hesaplar. Başarısız satırların yüzdesi reject_value'den küçükse PolyBase 1.000 satır daha almayı dener. Her ek 1.000 satırı içeri aktarmayı denedikten sonra başarısız olan satırların yüzdesini yeniden hesaplamaya devam eder.
Not
PolyBase başarısız satırların yüzdesini aralıklarla hesap ettiğinden, başarısız satırların gerçek yüzdesi reject_valueaşabilir.
Örnek:
Bu örnekte, üç REDDET seçeneğinin birbiriyle nasıl etkileşimde olduğu gösterilmektedir. Örneğin, , REJECT_TYPE = percentageve REJECT_VALUE = 30ise REJECT_SAMPLE_VALUE = 100aşağıdaki senaryo gerçekleşebilir:
- PolyBase ilk 100 satırı almayı dener; 25 başarısız ve 75 başarılı.
- Başarısız satırların yüzdesi 25%olarak hesaplanır ve bu değer 30%reddetme değerinden küçüktür. Sonuç olarak PolyBase dış veri kaynağından veri almaya devam eder.
- PolyBase sonraki 100 satırı yüklemeyi dener; bu kez 25 satır başarılı olur ve 75 satır başarısız olur.
- Başarısız satırların yüzdesi 50%olarak yeniden hesaplanır. Başarısız satırların yüzdesi 30% reddetme değerini aştı.
- PolyBase sorgusu, ilk 200 satırı döndürmeyi denedikten sonra 50% reddedilen satırla başarısız olur. PolyBase sorgusu reddetme eşiğinin aşıldığını algılamadan önce eşleşen satırlar döndürüldü.
REJECTED_ROW_LOCATION = Dizin Konumu
Dış Veri Kaynağı içindeki reddedilen satırların ve ilgili hata dosyasının yazılması gereken dizini belirtir.
Belirtilen yol yoksa oluşturulur.
_rejectedrowsadlı bir 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.
- Sunucusuz SQL havuzlarında yol
YearMonthDay_HourMinuteSecond_StatementID. klasörü oluşturan sorguyla ilişkilendirmek içinstatementIDkullanabilirsiniz. - Ayrılmış SQL havuzlarında, oluşturulan yol, örneğin
YearMonthDay -HourMinuteSecond20180330-173205biçiminde yük gönderme zamanına dayanır.
Bu klasörde, _reason dosyası ve veri dosyası olmak üzere iki tür dosya yazılır.
Daha fazla bilgi için bkz. CREATE EXTERNAL DATA SOURCE.
Neden dosyalarının ve veri dosyalarının her ikisi de CTAS deyimiyle ilişkilendirilmiş queryID'ye sahiptir. Veriler ve nedeni ayrı dosyalarda olduğundan, ilgili dosyaların eşleşen bir son eki vardır.
Sunucusuz SQL havuzlarında, error.json dosyası reddedilen satırlarla ilgili hatalarla karşılaşılan bir JSON dizisi içerir. Hatayı temsil eden her öğe aşağıdaki öznitelikleri içerir:
| Öznitelik | Açıklama |
|---|---|
Error |
Satırın reddedilmesine neden olan neden. |
Row |
Dosyadaki reddedilen satır sıra numarası. |
Column |
Reddedilen sütun sıra numarası. |
Value |
Reddedilen sütun değeri. Değer 100 karakterden büyükse, yalnızca ilk 100 karakter görüntülenir. |
File |
Bu satırın ait olduğu dosyanın yolu. |
İzinler
Bu kullanıcı izinlerini gerektirir:
- TABLO OLUŞTUR
- ŞEMA DEĞIŞTIRME
- DıŞ VERI KAYNAĞı DEĞIŞTIRME
- HERHANGI BIR DıŞ DOSYA BIÇIMINI DEĞIŞTIRME
- CONTROL DATABASE izinleri yalnızca ana anahtarı, veritabanı kapsamlı kimlik bilgilerini ve dış veri kaynağını oluşturmak için gereklidir.
Dış veri kaynağını oluşturan oturum açma bilgilerinin Hadoop veya Azure Blob Depolama'da bulunan dış veri kaynağını okuma ve yazma iznine sahip olması gerektiğini unutmayın.
Önemli
ALTER ANY EXTERNAL DATA SOURCE izni, herhangi bir sorumluya herhangi bir dış veri kaynağı nesnesi oluşturma ve değiştirme olanağı verir ve bu nedenle, veritabanındaki tüm veritabanı kapsamlı kimlik bilgilerine erişme olanağı da verir. Bu izin yüksek ayrıcalıklı olarak kabul edilmeli ve bu nedenle yalnızca sistemdeki güvenilir sorumlulara verilmelidir.
Hata işleme
CREATE EXTERNAL TABLE deyimi yürütülürken PolyBase dış veri kaynağına bağlanmayı dener. Bağlanma girişimi başarısız olursa, deyimi başarısız olur ve dış tablo oluşturulmaz. PolyBase, sorguyu başarısız olmadan önce bağlantıyı yeniden denemesi nedeniyle komutun başarısız olması bir dakika veya daha fazla sürebilir.
Açıklamalar
gibi SELECT FROM EXTERNAL TABLEgeçici sorgu senaryolarında PolyBase, dış veri kaynağından alınan satırları geçici bir tabloda depolar. Sorgu tamamlandıktan sonra PolyBase geçici tabloyu kaldırır ve siler. SQL tablolarında kalıcı veri depolanmaz.
Buna karşılık, dış TABLODAN SEÇ gibi içeri aktarma senaryosunda PolyBase, dış veri kaynağından alınan satırları SQL tablosunda kalıcı veri olarak depolar. PolyBase dış verileri aldığında sorgu yürütme sırasında yeni tablo oluşturulur.
PolyBase, sorgu performansını geliştirmek için sorgu hesaplamalarının bir bölümünü Hadoop'a gönderebilir. Bu eyleme koşul gönderimi adı verilir. Etkinleştirmek için, CREATE EXTERNAL DATA SOURCEhadoop resource manager location seçeneğini belirtin.
Aynı veya farklı dış veri kaynaklarına başvuran birçok dış tablo oluşturabilirsiniz.
Azure Synapse Analytics'teki sunucusuz ve ayrılmış SQL havuzları, veri sanallaştırma için farklı kod temelleri kullanır. Sunucusuz SQL havuzları yerel bir veri sanallaştırma teknolojisini destekler. Ayrılmış SQL havuzları hem yerel hem de PolyBase veri sanallaştırmayı destekler. PolyBase veri sanallaştırması, EXTERNAL DATA SOURCE TYPE=HADOOPile oluşturulduğunda kullanılır.
Sınırlama
Dış tablonun verileri Azure Synapse'in doğrudan yönetim denetimi altında olmadığından, herhangi bir zamanda bir dış işlem tarafından değiştirilebilir veya kaldırılabilir. Sonuç olarak, dış tablodaki sorgu sonuçlarının belirleyici olması garanti edilmez. Aynı sorgu, bir dış tabloda her çalıştırıldığında farklı sonuçlar döndürebilir. Benzer şekilde, dış veriler taşınır veya kaldırılırsa sorgu başarısız olabilir.
Dış tablolar UTF-8 harmanlamalarıyla kaynak verileri desteklemez. Kaynak verileriniz UTF-8 harmanlaması kullanıyorsa CREATE EXTERNAL TABLE deyimindeki her UTF-8 sütununa açıkça UTF-8 olmayan bir harmanlama atamanız gerekir. Bunun başarısız olması aşağıdaki çıkışa benzer bir hata iletisiyle sonuçlanır:
Msg 105105, Level 16, State 1, Line 22
105105;No column collation was specified in external table definition and the collation of current database 'Latin1_General_100_CI_AS_SC_UTF8' is not supported for external tables of type 'HADOOP'. Please specify a supported collation in the column definition.
Dış tablonun veritabanı harmanlaması UTF-8 ise, her sütun utf-8 olmayan harmanlamayla açıkça tanımlanmadığı sürece tablo oluşturma işlemi başarısız olur (örneğin, [UTF8_column] VARCHAR(128) COLLATE LATIN1_GENERAL_100_CI_AS_KS_WS NOT NULL).
Her birinin farklı dış veri kaynaklarına başvuracağı birden çok dış tablo oluşturabilirsiniz.
Dış tablolarda yalnızca bu Veri Tanımı Dili (DDL) deyimlerine izin verilir:
-
CREATE TABLEveDROP TABLE -
CREATE STATISTICSveDROP STATISTICS -
CREATE VIEWveDROP VIEW
Yapılar ve işlemler desteklenmez:
-
DEFAULTDış tablo sütunlarında kısıtlama - Veri İşleme Dili (DML) silme, ekleme ve güncelleştirme işlemleri
- Dış tablo sütunlarında dinamik veri maskeleme
Sorgu sınırlamaları
Klasör başına en fazla 30 bin dosyayı aşmamak önerilir. Çok fazla dosyaya başvurulduğunda, java sanal makinesi (JVM) yetersiz bellek özel durumu oluşabilir veya performans düşebilir.
Tablo genişliği sınırlamaları
Azure Veri Ambarı'ndaki PolyBase,tablo tanımına göre tek bir geçerli satırın boyut üst sınırına göre 1 MB satır genişliği sınırına sahiptir. Sütun şemasının toplamı 1 MB'tan büyükse PolyBase verileri sorgulayamaz.
Veri türü sınırlamaları
Aşağıdaki veri türleri PolyBase dış tablolarında kullanılamaz:
- coğrafya
- geometri
- hierarchyid
- resim
- Metin
- ntext
- xml
- Kullanıcı tanımlı herhangi bir tür
Kilitleme
SCHEMARESOLUTION nesnesinde paylaşılan kilit.
Örnekler
A. ADLS 2. Nesil'den Azure Synapse Analytics'e Veri aktarma
1. Nesil ADLS örnekleri için bkz. dış veri kaynağı oluşturma
-- These values come from your Azure Active Directory Application used to authenticate to ADLS Gen 2.
CREATE DATABASE SCOPED CREDENTIAL ADLUser
WITH IDENTITY = '<clientID>@\<OAuth2.0TokenEndPoint>',
SECRET = '<KEY>' ;
CREATE EXTERNAL DATA SOURCE AzureDataLakeStore
WITH (TYPE = HADOOP,
LOCATION = 'abfss://data@pbasetr.azuredatalakestore.net'
);
CREATE EXTERNAL FILE FORMAT TextFileFormat
WITH
(
FORMAT_TYPE = DELIMITEDTEXT
, FORMAT_OPTIONS ( FIELD_TERMINATOR = '|'
, STRING_DELIMITER = ''
, DATE_FORMAT = 'yyyy-MM-dd HH:mm:ss.fff'
, USE_TYPE_DEFAULT = FALSE
)
);
CREATE EXTERNAL TABLE [dbo].[DimProduct_external]
( [ProductKey] [int] NOT NULL,
[ProductLabel] nvarchar NULL,
[ProductName] nvarchar NULL )
WITH
(
LOCATION='/DimProduct/' ,
DATA_SOURCE = AzureDataLakeStore ,
FILE_FORMAT = TextFileFormat ,
REJECT_TYPE = VALUE ,
REJECT_VALUE = 0
);
CREATE TABLE [dbo].[DimProduct]
WITH (DISTRIBUTION = HASH([ProductKey] ) )
AS SELECT * FROM
[dbo].[DimProduct_external] ;
B. Parquet'den Azure Synapse Analytics'e Veri aktarma
Aşağıdaki örnek bir dış tablo oluşturur. Ardından ilk satırı döndürür:
CREATE EXTERNAL TABLE census_external_table
(
decennialTime varchar(20),
stateName varchar(100),
countyName varchar(100),
population int,
race varchar(50),
sex varchar(10),
minAge int,
maxAge int
)
WITH (
LOCATION = '/parquet/',
DATA_SOURCE = population_ds,
FILE_FORMAT = census_file_format
);
GO
SELECT TOP 1 * FROM census_external_table;
İlgili içerik
- DıŞ VERI KAYNAĞı oluşturma
- CREATE EXTERNAL FILE FORMAT (Transact-SQL)
- SEÇİM İLE HARİCİ TABLO OLUŞTUR
CREATE TABLE AS SELECT komutu ile bir tablo oluşturma işlemi
SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Azure Synapse'i
Analiz
* Analiz
Platform Sistemi (PDW) *
Genel Bakış: Analiz Platformu Sistemi
Dış tablo kullanarak:
- Hadoop veya Azure Blob Depolama verilerini Transact-SQL deyimleriyle sorgula.
- Hadoop veya Azure Blob Depolama'dan Analiz Platformu Sistemi'ne veri içeri aktarıp depolayın.
Ayrıca bkz . CREATE EXTERNAL DATA SOURCE (Transact-SQL) ve DROP EXTERNAL TABLE (Transact-SQL).
Sözdizimi
CREATE EXTERNAL TABLE { database_name.schema_name.table_name | schema_name.table_name | table_name }
( <column_definition> [ ,...n ] )
WITH (
LOCATION = 'hdfs_folder_or_filepath',
DATA_SOURCE = external_data_source_name,
FILE_FORMAT = external_file_format_name
[ , <reject_options> [ ,...n ] ]
)
[;]
<column_definition> ::=
column_name <data_type>
[ COLLATE collation_name ]
[ NULL | NOT NULL ]
<reject_options> ::=
{
| REJECT_TYPE = value | percentage,
| REJECT_VALUE = reject_value,
| REJECT_SAMPLE_VALUE = reject_sample_value,
}
Bağımsız değişken
{ database_name.schema_name.table_name | schema_name.table_name | table_name }
Oluşturulacak tablonun bir ile üç bölümlü adı.
Bir dış tablo için Analiz Platformu Sistemi yalnızca tablo meta verilerini ve Hadoop veya Azure Blob Depolama'da başvuruda bulunılan dosya veya klasör hakkındaki temel istatistikleri depolar. Analiz Platformu Sisteminde hiçbir gerçek veri taşınmaz veya depolanmaz.
Önemli
En iyi performans için, dış veri kaynağı sürücüsü üç bölümlü bir adı destekliyorsa, üç bölümlü adın sağlanması kesinlikle önerilir.
< > column_definition [ ,... n ]
CREATE EXTERNAL TABLE sütun adını, veri türünü, null atanabilirliği ve harmanlamayı yapılandırma özelliğini destekler. Dış tablolarda DEFAULT CONSTRAINT komutunu kullanamazsınız.
Veri türleri ve sütun sayısı dahil olmak üzere sütun tanımlarının dış dosyalardaki verilerle eşleşmesi gerekir. Uyuşmazlık varsa, gerçek veriler sorgulanırken dosya satırları reddedilir.
LOCATION = 'folder_or_filepath'
Hadoop veya Azure Blob Depolama'daki gerçek veriler için klasörü veya dosya yolunu ve dosya adını belirtir. Konum kök klasörden başlar. Kök klasör, dış veri kaynağında belirtilen veri konumudur.
Analiz Platformu Sistemi'nde CREATE EXTERNAL TABLE AS SELECT (CETAS) (Transact-SQL) deyimi, yoksa yolu ve klasörü oluşturur.
CREATE EXTERNAL TABLE yolu ve klasörü oluşturmaz.
KLASÖR OLARAK KONUM belirtirseniz, dış tablodan seçen bir PolyBase sorgusu klasörden ve tüm alt klasörlerinden dosyaları alır. Tıpkı Hadoop gibi PolyBase de gizli klasörleri döndürmez. Ayrıca, dosya adının altı çizili (_) veya nokta (.) ile başladığı dosyaları döndürmez.
Aşağıdaki görüntü örneğinde, LOCATION='/webdata/'polyBase sorgusu mydata.txt ve mydata2.txtsatırlarını döndürür. Gizli bir klasörün alt klasöründe olduğundan mydata3.txt döndürmez. Gizli bir dosya olduğundan _hidden.txt döndürmez.
Varsayılanı değiştirmek ve yalnızca kök klasörden okumak için <polybase.recursive.traversal> özniteliğini core-site.xml yapılandırma dosyasında 'false' olarak ayarlayın. Bu dosya, SQL Server'ın <SqlBinRoot>\PolyBase\Hadoop\Conf\ kökü altında bin altında bulunur. Örneğin, C:\Program Files\Microsoft SQL Server\MSSQL13.XD14\MSSQL\Binn\.
DATA_SOURCE = external_data_source_name
Dış verilerin konumunu içeren dış veri kaynağının adını belirtir. Bu konum hadoop veya Azure Blob Depolama'dır. Dış veri kaynağı oluşturmak için CREATE EXTERNAL DATA SOURCE (Transact-SQL) kullanın.
FILE_FORMAT = external_file_format_name
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 FORMAT (Transact-SQL) kullanın.
Reddetme Seçenekleri
Bu seçenek yalnızca TYPE = HADOOP olan dış veri kaynaklarında kullanılabilir.
PolyBase'in dış veri kaynağından kirli kayıtlarını nasıl işleyeceklerini belirleyen reddetme parametreleri belirtebilirsiniz. Gerçek veri türleri veya sütun sayısı dış tablonun sütun tanımlarıyla eşleşmiyorsa veri kaydı 'kirli' olarak kabul edilir.
Reddetme değerlerini belirtmediğinizde veya değiştirmediğinizde PolyBase varsayılan değerleri kullanır. CREATE EXTERNAL TABLE deyimiyle bir dış tablo oluşturduğunuzda reddetme parametreleriyle ilgili bu bilgiler ek meta veriler olarak depolanır. Gelecekte bir SELECT deyimi veya SELECT INTO SELECT deyimi dış tablodan veri seçtiğinde PolyBase, gerçek sorgu başarısız olmadan önce reddedilebilen satırların sayısını veya yüzdesini belirlemek için reddetme seçeneklerini kullanır. Reddetme eşiği aşılana kadar sorgu (kısmi) sonuçlar döndürür. Ardından uygun hata iletisiyle başarısız olur.
REJECT_TYPE = değer | Yüzde
REJECT_VALUE seçeneğinin değişmez değer olarak mı yoksa yüzde olarak mı belirtildiğini açıklar.
değer
REJECT_VALUE, yüzde değil değişmez değerdir. Reddedilen satır sayısı reject_valueaşıldığında PolyBase sorgusu başarısız olur.
Örneğin, REJECT_VALUE = 5 ve REJECT_TYPE = değeriyse, PolyBase SELECT sorgusu beş satır reddedildikten sonra başarısız olur.
yüzdesi
REJECT_VALUE, değişmez değer değil yüzdedir. Başarısız satırların yüzdesireject_valueaşıldığında PolyBase sorgusu başarısız olur. Başarısız satırların yüzdesi aralıklarla hesaplanır.
REJECT_VALUE = reject_value
Sorgu başarısız olmadan önce reddedilebilen satırların değerini veya yüzdesini belirtir.
REJECT_TYPE = değeri için reject_value 0 ile 2.147.483.647 arasında bir tamsayı olmalıdır.
REJECT_TYPE = yüzdesi için reject_value 0 ile 100 arasında bir kayan değer olmalıdır.
REJECT_SAMPLE_VALUE = reject_sample_value
REJECT_TYPE = yüzde değerini belirttiğinizde bu öznitelik gereklidir. PolyBase reddedilen satırların yüzdesini yeniden hesaplamadan önce alınmaya çalışacak satır sayısını belirler.
reject_sample_value parametresi 0 ile 2.147.483.647 arasında bir tamsayı olmalıdır.
Örneğin, REJECT_SAMPLE_VALUE = 1000 ise PolyBase, dış veri dosyasından 1000 satırı içeri aktarma girişiminde bulunduktan sonra başarısız olan satırların yüzdesini hesaplar. Başarısız satırların yüzdesi reject_value'den küçükse PolyBase 1.000 satır daha almayı dener. Her ek 1.000 satırı içeri aktarmayı denedikten sonra başarısız olan satırların yüzdesini yeniden hesaplamaya devam eder.
Not
PolyBase başarısız satırların yüzdesini aralıklarla hesap ettiğinden, başarısız satırların gerçek yüzdesi reject_valueaşabilir.
Örnek:
Bu örnekte, üç REDDET seçeneğinin birbiriyle nasıl etkileşimde olduğu gösterilmektedir. Örneğin, REJECT_TYPE = yüzde, REJECT_VALUE = 30 ve REJECT_SAMPLE_VALUE = 100 ise aşağıdaki senaryo oluşabilir:
- PolyBase ilk 100 satırı almayı dener; 25 başarısız ve 75 başarılı.
- Başarısız satırların yüzdesi 25%olarak hesaplanır ve bu değer 30%reddetme değerinden küçüktür. Sonuç olarak PolyBase dış veri kaynağından veri almaya devam eder.
- PolyBase sonraki 100 satırı yüklemeyi dener; bu kez 25 satır başarılı olur ve 75 satır başarısız olur.
- Başarısız satırların yüzdesi 50%olarak yeniden hesaplanır. Başarısız satırların yüzdesi 30% reddetme değerini aştı.
- PolyBase sorgusu, ilk 200 satırı döndürmeyi denedikten sonra 50% reddedilen satırla başarısız olur. PolyBase sorgusu reddetme eşiğinin aşıldığını algılamadan önce eşleşen satırlar döndürüldü.
İzinler
Bu kullanıcı izinlerini gerektirir:
- TABLO OLUŞTUR
- ŞEMA DEĞIŞTIRME
- DıŞ VERI KAYNAĞı DEĞIŞTIRME
- HERHANGI BIR DıŞ DOSYA BIÇIMINI DEĞIŞTIRME
- VERITABANıNı DENETLEME
Dış veri kaynağını oluşturan oturum açma bilgilerinin Hadoop veya Azure Blob Depolama'da bulunan dış veri kaynağını okuma ve yazma iznine sahip olması gerektiğini unutmayın.
Önemli
ALTER ANY EXTERNAL DATA SOURCE izni, herhangi bir sorumluya herhangi bir dış veri kaynağı nesnesi oluşturma ve değiştirme olanağı verir ve bu nedenle, veritabanındaki tüm veritabanı kapsamlı kimlik bilgilerine erişme olanağı da verir. Bu izin yüksek ayrıcalıklı olarak kabul edilmeli ve bu nedenle yalnızca sistemdeki güvenilir sorumlulara verilmelidir.
Hata işleme
CREATE EXTERNAL TABLE deyimi yürütülürken PolyBase dış veri kaynağına bağlanmayı dener. Bağlanma girişimi başarısız olursa, deyimi başarısız olur ve dış tablo oluşturulmaz. PolyBase, sorguyu başarısız olmadan önce bağlantıyı yeniden denemesi nedeniyle komutun başarısız olması bir dakika veya daha fazla sürebilir.
Açıklamalar
gibi SELECT FROM EXTERNAL TABLEgeçici sorgu senaryolarında PolyBase, dış veri kaynağından alınan satırları geçici bir tabloda depolar. Sorgu tamamlandıktan sonra PolyBase geçici tabloyu kaldırır ve siler. SQL tablolarında kalıcı veri depolanmaz.
Buna karşılık, dış TABLODAN SEÇ gibi içeri aktarma senaryosunda PolyBase, dış veri kaynağından alınan satırları SQL tablosunda kalıcı veri olarak depolar. PolyBase dış verileri aldığında sorgu yürütme sırasında yeni tablo oluşturulur.
PolyBase, sorgu performansını geliştirmek için sorgu hesaplamalarının bir bölümünü Hadoop'a gönderebilir. Bu eyleme koşul gönderimi adı verilir. Etkinleştirmek için , CREATE EXTERNAL DATA SOURCE (Transact-SQL) alanında Hadoop resource manager konum seçeneğini belirtin.
Aynı veya farklı dış veri kaynaklarına başvuran birçok dış tablo oluşturabilirsiniz.
Sınırlama
Dış tablonun verileri aletin doğrudan yönetim denetimi altında olmadığından, herhangi bir zamanda bir dış işlem tarafından değiştirilebilir veya kaldırılabilir. Sonuç olarak, dış tablodaki sorgu sonuçlarının belirleyici olması garanti edilmez. Aynı sorgu, bir dış tabloda her çalıştırıldığında farklı sonuçlar döndürebilir. Benzer şekilde, dış veriler taşınır veya kaldırılırsa sorgu başarısız olabilir.
Her birinin farklı dış veri kaynaklarına başvuracağı birden çok dış tablo oluşturabilirsiniz. Farklı Hadoop veri kaynaklarında aynı anda sorgu çalıştırırsanız, her Hadoop kaynağı aynı 'hadoop bağlantısı' sunucu yapılandırma ayarını kullanmalıdır. Örneğin, cloudera Hadoop kümesine ve Hortonworks Hadoop kümesine karşı aynı anda sorgu çalıştıramazsınız çünkü bunlar farklı yapılandırma ayarları kullanır. Yapılandırma ayarları ve desteklenen birleşimler için bkz . PolyBase bağlantı yapılandırması (Transact-SQL).
Dış tablolarda yalnızca bu Veri Tanımı Dili (DDL) deyimlerine izin verilir:
-
CREATE TABLEveDROP TABLE -
CREATE STATISTICSveDROP STATISTICS -
CREATE VIEWveDROP VIEW
Yapılar ve işlemler desteklenmez:
-
DEFAULTDış tablo sütunlarında kısıtlama - Veri İşleme Dili (DML) silme, ekleme ve güncelleştirme işlemleri
- Dış tablo sütunlarında dinamik veri maskeleme
Sorgu sınırlamaları
PolyBase, 32 eşzamanlı PolyBase sorgusu çalıştırırken klasör başına en fazla 33k dosya kullanabilir. Bu maksimum sayı, her HDFS klasöründeki hem dosyaları hem de alt klasörleri içerir. Eşzamanlılık derecesi 32'den azsa, bir kullanıcı HDFS'de 33k'tan fazla dosya içeren klasörlerde PolyBase sorguları çalıştırabilir. Dış dosya yollarını kısa tutmanızı ve HDFS klasörü başına en fazla 30k dosya kullanmanızı öneririz. Çok fazla dosyaya başvurulduğunda, java sanal makinesi (JVM) yetersiz bellek özel durumu oluşabilir.
Tablo genişliği sınırlamaları
SQL Server 2016'da PolyBase, tablo tanımına göre tek bir geçerli satırın boyut üst sınırına göre 32 KB satır genişliği sınırına sahiptir. Sütun şemasının toplamı 32 KB'tan büyükse PolyBase verileri sorgulayamaz.
Azure Synapse Analytics'te bu sınırlama 1 MB'a yükseltilmiştir.
Veri türü sınırlamaları
Aşağıdaki veri türleri PolyBase dış tablolarında kullanılamaz:
- coğrafya
- geometri
- hierarchyid
- resim
- Metin
- ntext
- xml
- Kullanıcı tanımlı herhangi bir tür
Kilitleme
SCHEMARESOLUTION nesnesinde paylaşılan kilit.
Güvenlik
Dış tablonun veri dosyaları Hadoop veya Azure Blob Depolama'da depolanır. Bu veri dosyaları kendi işlemleriniz tarafından oluşturulur ve yönetilir. Dış verilerin güvenliğini yönetmek sizin sorumluluğunuzdadır.
Örnekler
A. Analytics Platform Sistemi verileriyle HDFS verilerini birleştirme
SELECT cs.user_ip FROM ClickStream cs
JOIN [User] u ON cs.user_ip = u.user_ip
WHERE cs.url = 'www.microsoft.com';
B. HDFS'den dağıtılmış Analiz Platformu Sistem Tablosuna satır verilerini içeri aktarma
CREATE TABLE ClickStream_PDW
WITH ( DISTRIBUTION = HASH (url) )
AS SELECT url, event_date, user_ip FROM ClickStream;
C. SATıR verilerini HDFS'den çoğaltılmış Bir Analiz Platformu Sistem Tablosuna aktarma
CREATE TABLE ClickStream_PDW
WITH ( DISTRIBUTION = REPLICATE )
AS SELECT url, event_date, user_ip
FROM ClickStream;
İlgili içerik
- CREATE EXTERNAL DATA SOURCE (Transact-SQL)
- CREATE EXTERNAL FILE FORMAT (Transact-SQL)
- CREATE EXTERNAL TABLE AS SELECT (CETAS) (Harici Tablo Oluşturma ve Seçme) (Transact-SQL)
CREATE TABLE AS SELECT komutu ile bir tablo oluşturma işlemi
SQL Server
Azure SQL Veritabanı
* Azure SQL Yönetilen Örneği *
Azure Synapse'i
Analiz
Genel Bakış: Azure SQL Yönetilen Örneği
Azure SQL Yönetilen Örneği'nde bir dış veri tablosu oluşturur. Tam bilgi için bkz. Azure SQL Yönetilen Örneği ile veri sanallaştırma.
Azure SQL Yönetilen Örneği'nde veri sanallaştırma, Azure Data Lake Storage 2. Nesil veya Azure Blob Depolama'daki çeşitli dosya biçimlerindeki dış verilere erişim sağlar ve bunları T-SQL deyimleriyle sorgulamak, hatta birleştirmeleri kullanarak verileri yerel olarak depolanan ilişkisel verilerle birleştirmek için bile sağlar.
Ayrıca bkz . CREATE EXTERNAL DATA SOURCE (Transact-SQL) ve DROP EXTERNAL TABLE (Transact-SQL).
Sözdizimi
CREATE EXTERNAL TABLE { database_name.schema_name.table_name | schema_name.table_name | table_name }
( <column_definition> [ ,...n ] )
WITH (
LOCATION = 'filepath',
DATA_SOURCE = external_data_source_name,
FILE_FORMAT = external_file_format_name
)
[;]
<column_definition> ::=
column_name <data_type>
[ COLLATE collation_name ]
[ NULL | NOT NULL ]
Bağımsız değişken
{ database_name.schema_name.table_name | schema_name.table_name | table_name }
Oluşturulacak tablonun bir ile üç bölümlü adı.
Dış tablo için yalnızca tablo meta verilerinin yanı sıra Azure Data Lake veya Azure Blob Depolama'da başvuruda bulunılan dosya veya klasör hakkındaki temel istatistikler. Dış tablolar oluşturulduğunda hiçbir gerçek veri taşınmaz veya depolanmaz.
Önemli
En iyi performans için, dış veri kaynağı sürücüsü üç bölümlü bir adı destekliyorsa, üç bölümlü adın sağlanması kesinlikle önerilir.
< > column_definition [ ,... n ]
CREATE EXTERNAL TABLE sütun adını, veri türünü, null atanabilirliği ve harmanlamayı yapılandırma özelliğini destekler. Dış tablolarda DEFAULT CONSTRAINT komutunu kullanamazsınız.
Veri türleri ve sütun sayısı dahil olmak üzere sütun tanımlarının dış dosyalardaki verilerle eşleşmesi gerekir. Uyuşmazlık varsa, gerçek veriler sorgulandığında dosya satırları reddedilir.
LOCATION = 'folder_or_filepath'
Azure Data Lake veya Azure Blob Depolama'daki gerçek veriler için klasörü veya dosya yolunu ve dosya adını belirtir. Konum kök klasörden başlar. Kök klasör, dış veri kaynağında belirtilen veri konumudur.
CREATE EXTERNAL TABLE yolu ve klasörü oluşturmaz.
Klasör olarak KONUM belirtirseniz, dış tablodan seçen Azure SQL Yönetilen Örneği'nden gelen sorgu, klasördeki dosyaları alır ancak alt klasörlerinin tümünü alamaz.
Azure SQL Yönetilen Örneği, alt klasörlerdeki veya gizli klasörlerdeki dosyaları bulamıyor. Ayrıca, dosya adının altı çizili (_) veya nokta (.) ile başladığı dosyaları döndürmez.
Aşağıdaki görüntü örneğinde, LOCATION='/webdata/'bir sorgu mydata.txt'den satır döndürür. Bir alt klasörde olduğundan mydata2.txt döndürmez, gizli bir klasörde olduğundan mydata3.txt döndürmez ve gizli bir dosya olduğundan _hidden.txt döndürmez.
DATA_SOURCE = external_data_source_name
Dış verilerin konumunu içeren dış veri kaynağının adını belirtir. Bu konum Azure Data Lake'tedir. Dış veri kaynağı oluşturmak için CREATE EXTERNAL DATA SOURCE (Transact-SQL) kullanın.
FILE_FORMAT = external_file_format_name
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 FORMAT (Transact-SQL) kullanın.
İzinler
Bu kullanıcı izinlerini gerektirir:
- TABLO OLUŞTUR
- ŞEMA DEĞIŞTIRME
- DıŞ VERI KAYNAĞı DEĞIŞTIRME
- HERHANGI BIR DıŞ DOSYA BIÇIMINI DEĞIŞTIRME
- CONTROL DATABASE izinleri yalnızca ana anahtarı, veritabanı kapsamlı kimlik bilgilerini ve dış veri kaynağını oluşturmak için gereklidir.
Dış veri kaynağını oluşturan oturum açma bilgilerinin Hadoop veya Azure Blob Depolama'da bulunan dış veri kaynağını okuma ve yazma iznine sahip olması gerektiğini unutmayın.
Önemli
ALTER ANY EXTERNAL DATA SOURCE izni, herhangi bir sorumluya herhangi bir dış veri kaynağı nesnesi oluşturma ve değiştirme olanağı verir ve bu nedenle, veritabanındaki tüm veritabanı kapsamlı kimlik bilgilerine erişme olanağı da verir. Bu izin yüksek ayrıcalıklı olarak kabul edilmeli ve bu nedenle yalnızca sistemdeki güvenilir sorumlulara verilmelidir.
Açıklamalar
gibi SELECT FROM EXTERNAL TABLEgeçici sorgu senaryolarında, dış veri kaynağından alınan satırlar geçici bir tabloda depolanır. Sorgu tamamlandıktan sonra satırlar kaldırılır ve geçici tablo silinir. SQL tablolarında kalıcı veri depolanmaz.
Buna karşılık, gibi SELECT INTO FROM EXTERNAL TABLEiçeri aktarma senaryosunda, dış veri kaynağından alınan satırlar SQL tablosunda kalıcı veri olarak depolanır. Yeni tablo, dış veriler alındığında sorgu yürütme sırasında oluşturulur.
Şu anda Azure SQL Yönetilen Örneği ile veri sanallaştırma salt okunurdur.
Aynı veya farklı dış veri kaynaklarına başvuran birçok dış tablo oluşturabilirsiniz.
Sınırlama
Dış tablonun verileri Azure SQL Yönetilen Örneği'nin doğrudan yönetim denetimi altında olmadığından, herhangi bir zamanda bir dış işlem tarafından değiştirilebilir veya kaldırılabilir. Sonuç olarak, dış tablodaki sorgu sonuçlarının belirleyici olması garanti edilmez. Aynı sorgu, bir dış tabloda her çalıştırıldığında farklı sonuçlar döndürebilir. Benzer şekilde, dış veriler taşınır veya kaldırılırsa sorgu başarısız olabilir.
Her birinin farklı dış veri kaynaklarına başvuracağı birden çok dış tablo oluşturabilirsiniz.
Dış tablolarda yalnızca bu Veri Tanımı Dili (DDL) deyimlerine izin verilir:
-
CREATE TABLEveDROP TABLE -
CREATE STATISTICSveDROP STATISTICS -
CREATE VIEWveDROP VIEW
Yapılar ve işlemler desteklenmez:
-
DEFAULTDış tablo sütunlarında kısıtlama - Veri İşleme Dili (DML) silme, ekleme ve güncelleştirme işlemleri
Tablo genişliği sınırlamaları
1 MB satır genişliği sınırı, tablo tanımına göre tek bir geçerli satırın en büyük boyutuna bağlıdır. Sütun şemasının toplamı 1 MB'tan büyükse veri sanallaştırma sorguları başarısız olur.
Veri türü sınırlamaları
Aşağıdaki veri türleri Azure SQL Yönetilen Örneği'ndeki dış tablolarda kullanılamaz:
- coğrafya
- geometri
- hierarchyid
- resim
- Metin
- ntext
- xml
- json
- Kullanıcı tanımlı herhangi bir tür
Kilitleme
SCHEMARESOLUTION nesnesinde paylaşılan kilit.
Örnekler
A. Dış tabloyla Azure SQL Yönetilen Örneği'nden dış verileri sorgulama
Daha fazla örnek için bkz . CREATE EXTERNAL DATA SOURCE (Transact-SQL) veya bkz. Azure SQL Yönetilen Örneği ile veri sanallaştırma.
Yoksa veritabanı ana anahtarını oluşturun.
-- Optional: Create MASTER KEY if it doesn't exist in the database: CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<Strong Password>' GOSAS belirteci kullanarak veritabanı kapsamlı kimlik bilgilerini oluşturun. Yönetilen kimlik de kullanabilirsiniz.
CREATE DATABASE SCOPED CREDENTIAL MyCredential WITH IDENTITY = 'SHARED ACCESS SIGNATURE', SECRET = '<KEY>' ; --Removing leading '?' GOKimlik bilgilerini kullanarak dış veri kaynağını oluşturun.
--Create external data source pointing to the file path, and referencing database-scoped credential: CREATE EXTERNAL DATA SOURCE MyPrivateExternalDataSource WITH ( LOCATION = 'abs://public@pandemicdatalake.blob.core.windows.net/curated/covid-19/bing_covid-19_data/latest' CREDENTIAL = [MyCredential] ) GOVerileri yerel bir tablo gibi sorgulamak için BIR EXTERNAL FILE FORMAT ve external table oluşturun.
-- Or, create an EXTERNAL FILE FORMAT and an EXTERNAL TABLE --Create external file format CREATE EXTERNAL FILE FORMAT DemoFileFormat WITH ( FORMAT_TYPE=PARQUET ) GO --Create external table: CREATE EXTERNAL TABLE tbl_TaxiRides( vendorID VARCHAR(100) COLLATE Latin1_General_BIN2, tpepPickupDateTime DATETIME2, tpepDropoffDateTime DATETIME2, passengerCount INT, tripDistance FLOAT, puLocationId VARCHAR(8000), doLocationId VARCHAR(8000), startLon FLOAT, startLat FLOAT, endLon FLOAT, endLat FLOAT, rateCodeId SMALLINT, storeAndFwdFlag VARCHAR(8000), paymentType VARCHAR(8000), fareAmount FLOAT, extra FLOAT, mtaTax FLOAT, improvementSurcharge VARCHAR(8000), tipAmount FLOAT, tollsAmount FLOAT, totalAmount FLOAT ) WITH ( LOCATION = 'yellow/puYear=*/puMonth=*/*.parquet', DATA_SOURCE = NYCTaxiExternalDataSource, FILE_FORMAT = MyFileFormat ); GO --Then, query the data via an external table with T-SQL: SELECT TOP 10 * FROM tbl_TaxiRides; GO
İlgili içerik
Aşağıdaki makalelerde dış tablolar ve ilgili kavramlar hakkında daha fazla bilgi edinin:
- Azure SQL Yönetilen Örneği ile veri sanallaştırmayı
- CREATE EXTERNAL DATA SOURCE (Transact-SQL)
- CREATE EXTERNAL FILE FORMAT (Transact-SQL)
- CREATE EXTERNAL TABLE AS SELECT (CETAS) (Harici Tablo Oluşturma ve Seçme) (Transact-SQL)
Genel Bakış: Microsoft Fabric
Şunlar için geçerlidir: Microsoft Fabric Veri Ambarı
Doku Veri Ambarı'nda hakkında daha fazla bilgi ve örnek için OPENROWSET bkz: