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
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Warehouse in Microsoft Fabric
SQL database in Microsoft Fabric
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 (13.x) ve sonraki sürümleri.
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ı sağlamanız gerekir.
< > 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 .
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'
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. Daha sonra yerel SQL Server tablosundaki verileri dış veri kaynağına aktarmak için kullanabilirsiniz INSERT INTO . Daha fazla bilgi için bkz . PolyBase sorgu senaryoları.
Bir klasör olarak belirtirseniz LOCATION , 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, bir LOCATION='/webdata/'PolyBase sorgusu ve mydata2.txtiçindeki mydata.txt satırları döndürür. Gizli bir alt klasördeki bir dosya olduğundan döndürülmüyor mydata3.txt . Gizli bir dosya olduğu için de geri dönmez _hidden.txt .
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 komutunu 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 FORMATkullanın.
Dış dosya biçimleri birden çok benzer dış dosya tarafından yeniden kullanılabilir.
REDDET seçenekleri
Bu seçenek yalnızca dış veri kaynaklarıyla kullanılabilir.TYPE = HADOOP
PolyBase'in dış veri kaynağından alınan kirli kayıtları nasıl işlediğini belirleyen reddetme parametrelerini 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. Reddetme parametreleriyle ilgili bu bilgiler, deyimiyle CREATE EXTERNAL TABLE bir dış tablo oluşturduğunuzda ek meta veriler olarak depolanır. Gelecekteki SELECT bir deyim veya SELECT INTO SELECT deyim 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 }
Seçeneğin REJECT_VALUE değişmez değer olarak mı yoksa yüzde olarak mı belirtildiğini açıklar.
değer
REJECT_VALUEyüzde değil değişmez değerdir. Reddedilen satır sayısı reject_value aşıldığında sorgu başarısız olur.Örneğin, ve
REJECT_TYPE = valueSELECTiseREJECT_VALUE = 5, beş satır reddedildikten sonra sorgu başarısız olur.yüzdesi
REJECT_VALUEsabit değer değil yüzde değeridir. Başarısız satırların yüzdesireject_value aşı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.
içinREJECT_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.
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 1.000 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 üç REJECT seçeneğin birbiriyle nasıl etkileşime geçtiğini 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ülür.
REJECTED_ROW_LOCATION = dizin konumu
Şunlar için geçerlidir: SQL Server 2019 (15.x) CU 6 ve sonraki sürümleri ve 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.
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:
CREATE TABLEALTER ANY SCHEMAALTER ANY EXTERNAL DATA SOURCE-
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)
Komutta kullanılan içinde belirtilen uzak oturum açma bilgilerinin parametresinde DATABASE SCOPED CREDENTIALCREATE EXTERNAL TABLE belirtilen dış veri kaynağında yol/tablo/koleksiyon için Okuma iznine LOCATION sahip olması gerektiğini unutmayın. Verileri hadoop veya Azure Depolama dış veri kaynağına aktarmak için bunu EXTERNAL TABLE kullanmayı planlıyorsanız, belirtilen oturum açma bilgilerinin içinde LOCATIONbelirtilen yolda yazma izni olmalıdır. 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
bu ALTER ANY EXTERNAL DATA SOURCE izin, 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, gibi içeri aktarma senaryosunda SELECT INTO FROM EXTERNAL TABLEPolyBase 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.
Hadoop biçimi yalnızca SQL Server 2016 (13.x), SQL Server 2017 (14.x) ve SQL Server 2019 'da (15.x) desteklenir.
PolyBase, sorgu performansını geliştirmek için sorgu hesaplamalarının bir bölümünü Hadoop'a gönderebilir. Bu eylem, koşul aşağı gönderme olarak bilinir. 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.
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ı.
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 (13.x), PolyBase'in tablo tanımına göre tek bir geçerli satırın en büyük boyutuna göre satır genişliği sınırı 32 KB'tır. 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
sp_data_source_objects kullanarak diziler içeren MongoDB koleksiyonlarının koleksiyon şemasını (sütunlar) tespit edin ve dış tabloyu manuel olarak oluşturun.
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.
Kilitleme
Nesne üzerinde SCHEMARESOLUTION 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 ve CREATE EXTERNAL FILE FORMAT.
CREATE EXTERNAL DATA SOURCE mydatasource
WITH (
TYPE = HADOOP,
LOCATION = 'hdfs://xxx.xxx.xxx.xxx:8020'
);
GO
CREATE EXTERNAL FILE FORMAT myfileformat
WITH (
FORMAT_TYPE = DELIMITEDTEXT,
FORMAT_OPTIONS (FIELD_TERMINATOR = '|')
);
GO
CREATE EXTERNAL TABLE ClickStream
(
url VARCHAR (50),
event_date DATE,
user_IP VARCHAR (50)
)
WITH (
DATA_SOURCE = mydatasource,
LOCATION = '/webdata/employee.tbl',
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 ve CREATE EXTERNAL FILE FORMAT.
CREATE EXTERNAL DATA SOURCE mydatasource_rc
WITH (
TYPE = HADOOP,
LOCATION = 'hdfs://xxx.xxx.xxx.xxx:8020'
);
GO
CREATE EXTERNAL FILE FORMAT myfileformat_rc
WITH (
FORMAT_TYPE = RCFILE,
SERDE_METHOD = 'org.apache.hadoop.hive.serde2.columnar.LazyBinaryColumnarSerDe'
);
GO
CREATE EXTERNAL TABLE ClickStream_rc
(
url VARCHAR (50),
event_date DATE,
user_ip VARCHAR (50)
)
WITH (
DATA_SOURCE = mydatasource_rc,
LOCATION = '/webdata/employee_rc.tbl',
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 ve CREATE EXTERNAL FILE FORMAT.
CREATE EXTERNAL DATA SOURCE mydatasource_orc
WITH (
TYPE = HADOOP,
LOCATION = 'hdfs://xxx.xxx.xxx.xxx:8020'
);
GO
CREATE EXTERNAL FILE FORMAT myfileformat_orc
WITH (
FORMAT = ORC,
COMPRESSION = 'org.apache.hadoop.io.compress.SnappyCodec'
);
GO
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 tablosunun standart JOIN hali 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 AS cs
INNER JOIN UrlDescription AS 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 ve CREATE DATABASE SCOPED CREDENTIAL.
-- Create a Master Key
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
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>';
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;
/* 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>';
GO
/*
* 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>';
GO
/*
* 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. 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 (
DATA_SOURCE = external_data_source_name,
LOCATION = 'DB1.mySchema.customer'
);
J. Teradata için dış tablo oluşturma
-- Create a Master Key
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
GO
/*
* 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>';
GO
/* 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
);
GO
/* 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>';
GO
/*
* 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>';
GO
/* 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 sonraki sürümleri.
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
);
İlgili içerik
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. EXTERNAL DATA SOURCE OLUŞTURMA.
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ı sağlamanız gerekir.
< > 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
- Kullanıcı tanımlı herhangi bir tür
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 olarak 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 ise LOCATION='/webdata/', sorgu dosyasından mydata.txtsatırlar döndürür. Bir alt klasörde olduğu için döndürülmüyor mydata2.txt , gizli bir klasörde olduğu için döndürülmüyor mydata3.txt ve gizli bir dosya olduğu için döndürülmüyor _hidden.txt .
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 komutunu 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 FORMATkullanı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. Belirtilmezse, uzak nesnenin şemasının olduğu varsayılır dbove 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 ve/veya OBJECT_NAME yan tümcelerinde katalog görünümünün SCHEMA_NAME 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 yan tümcesinde DISTRIBUTION 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 veya REVOKE kullanınGRANT. 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:
CREATE TABLEALTER ANY SCHEMAALTER ANY EXTERNAL DATA SOURCEALTER ANY EXTERNAL FILE FORMAT-
CONTROL DATABASEizinleri 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
bu ALTER ANY EXTERNAL DATA SOURCE izin, 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
Nesne üzerinde SCHEMARESOLUTION 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, 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 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
deyimi yürütülürken CREATE EXTERNAL TABLE , 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 genellikle dış tablonun tamamının yerel olarak kopyalanıp birleştirilmeye 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ç nokta için desteklenmez: Uzak tabloya bağlantı özel bir uç nokta olduğunda dış tablo sorguları desteklenmez.
Örnekler
Daha fazla örnek için bkz . CREATE EXTERNAL DATA SOURCE 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, ve OBJECT_NAME yan tümcelerini kullanarak uzak DMV'yi bir dış tabloyla SCHEMA_NAME 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 = '<password>';SAS 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 '?'Kimlik 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] );Verileri yerel bir
EXTERNAL TABLEtablo gibi sorgulamak için birEXTERNAL FILE FORMATve 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 ); --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 ( DATA_SOURCE = NYCTaxiExternalDataSource, LOCATION = 'yellow/puYear = */puMonth = */*.parquet', FILE_FORMAT = MyFileFormat ); --Then, query the data via an external table with T-SQL: SELECT TOP 10 * FROM tbl_TaxiRides;
İ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 ile Azure Data Lake Storage 1. Nesil ve 2. Nesil'den verileri sorgulayabilir, içeri aktarabilir ve depolayabilir. Sunucusuz, 'i desteklemez
TYPE=Hadoop.
Ayrıca bkz . DıŞ VERI KAYNAĞı OLUŞTURMA ve DıŞ TABLOYU BıRAKMA.
Azure Synapse ile dış tabloları kullanma hakkında daha fazla bilgi ve örnek için bkz. Synapse SQL ile 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ı sağlamanız gerekir.
< > 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 .
Not
Metin ,ntext ve xml veri türleri, Synapse Analytics'in dış tablolarındaki sütunlar için veri türlerini desteklemez.
- 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 sorgulandığında 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) deyimi, yoksa yolu ve klasörü oluşturur.
CREATE EXTERNAL TABLE yolu ve klasörü oluşturmaz.
Bir klasör olarak belirtirseniz LOCATION , 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, bir LOCATION='/webdata/'PolyBase sorgusu ve mydata2.txtiçindeki mydata.txt satırları döndürür. Gizli bir klasörün alt klasöründe olduğundan ve mydata3.txt gizli bir dosya olduğundan döndürülmüyor _hidden.txt .
Hadoop dış tablolarından farklı olarak, yolun sonunda /** belirtmediğiniz sürece yerel dış tablolar alt klasörler döndürmez. Bu örnekte, sunucusuz bir SQL havuzu sorgusu dosyasından mydata.txtsatır döndürüyorsaLOCATION='/webdata/'. Geri dönmez mydata2.txt ve mydata3.txt bir alt klasörde bulunduklarından. 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 adlarla 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 komutunu 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 FORMATkullanın.
TABLO_SEÇENEKLERİ
Temel alınan dosyaların nasıl okunduğunu açıklayan seçenek kümesini belirtir. Şu anda tek kullanılabilir olan , {"READ_OPTIONS":["ALLOW_INCONSISTENT_READS"]}bazı tutarsız okuma işlemlerine neden olsa bile dış tabloya temel dosyalarda yapılan güncelleştirmeleri yoksaymasını emredendir. 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 dış veri kaynaklarıyla kullanılabilir.TYPE = HADOOP
PolyBase'in dış veri kaynağından alınan kirli kayıtları nasıl işlediğini belirleyen reddetme parametrelerini 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. Reddetme parametreleriyle ilgili bu bilgiler, deyimiyle CREATE EXTERNAL TABLE bir dış tablo oluşturduğunuzda ek meta veriler olarak depolanır. Gelecekteki SELECT bir deyim veya SELECT INTO SELECT deyim 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çim 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_VALUEyüzde değil değişmez değerdir. Reddedilen satır sayısı reject_value aşıldığında PolyBase sorgusu başarısız olur.Reddedilen satır sayısı reject_value aşıldığında sorgu başarısız olur. Örneğin, ve
REJECT_TYPE = valueiseREJECT_VALUE = 5, PolyBaseSELECTsorgusu beş satır reddedildikten sonra başarısız olur.yüzdesi
REJECT_VALUEsabit değer değil yüzde değeridir. Başarısız satırların yüzdesireject_value aşı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.
- için
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 1.000 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 üç REJECT seçeneğin birbiriyle nasıl etkileşime geçtiğini 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ülür.
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:
CREATE TABLEALTER ANY SCHEMAALTER ANY EXTERNAL DATA SOURCEALTER ANY EXTERNAL FILE FORMAT-
CONTROL DATABASEizinleri 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
bu ALTER ANY EXTERNAL DATA SOURCE izin, 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, gibi içeri aktarma senaryosunda SELECT INTO FROM EXTERNAL TABLEPolyBase 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 eylem, koşul aşağı gönderme olarak bilinir. 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. ile TYPE=HADOOPoluşturulduğunda PolyBase veri sanallaştırması kullanılırEXTERNAL DATA SOURCE.
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, deyimindeki CREATE EXTERNAL TABLE 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.000 dosyayı aşmamanızı öneririz. Ç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
Nesne üzerinde SCHEMARESOLUTION 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>';
GO
CREATE EXTERNAL DATA SOURCE AzureDataLakeStore
WITH (
TYPE = HADOOP,
LOCATION = 'abfss://data@pbasetr.azuredatalakestore.net'
);
GO
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
)
);
GO
CREATE EXTERNAL TABLE [dbo].[DimProduct_external]
(
[ProductKey] INT NOT NULL,
[ProductLabel] NVARCHAR NULL,
[ProductName] NVARCHAR NULL
)
WITH (
DATA_SOURCE = AzureDataLakeStore,
LOCATION = '/DimProduct/',
FILE_FORMAT = TextFileFormat,
REJECT_TYPE = value,
REJECT_VALUE = 0
);
GO
CREATE TABLE [dbo].[DimProduct]
WITH (DISTRIBUTION = HASH([ProductKey])) AS
GO
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 (
DATA_SOURCE = population_ds,
LOCATION = '/parquet/',
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 . DıŞ VERI KAYNAĞı OLUŞTURMA ve DıŞ TABLOYU BıRAKMA.
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ı sağlamanız gerekir.
< > 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 .
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'
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) deyimi, yoksa yolu ve klasörü oluşturur.
CREATE EXTERNAL TABLE yolu ve klasörü oluşturmaz.
Bir klasör olarak belirtirseniz LOCATION , 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, bir LOCATION='/webdata/'PolyBase sorgusu ve mydata2.txtiçindeki mydata.txt satırları döndürür. Gizli bir klasörün alt klasöründe olduğundan ve mydata3.txt gizli bir dosya olduğundan döndürülmüyor _hidden.txt .
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 komutunu 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 FORMATkullanın.
REDDET seçenekleri
Bu seçenek yalnızca dış veri kaynaklarıyla kullanılabilir.TYPE = HADOOP
PolyBase'in dış veri kaynağından alınan kirli kayıtları nasıl işlediğini belirleyen reddetme parametrelerini 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. Reddetme parametreleriyle ilgili bu bilgiler, deyimiyle CREATE EXTERNAL TABLE bir dış tablo oluşturduğunuzda ek meta veriler olarak depolanır. Gelecekteki SELECT bir deyim veya SELECT INTO SELECT deyim 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 }
Seçeneğin REJECT_VALUE değişmez değer olarak mı yoksa yüzde olarak mı belirtildiğini açıklar.
değer
REJECT_VALUEyüzde değil değişmez değerdir. Reddedilen satır sayısı reject_value aşıldığında PolyBase sorgusu başarısız olur.Örneğin, ve
REJECT_TYPE = valueiseREJECT_VALUE = 5, PolyBaseSELECTsorgusu beş satır reddedildikten sonra başarısız olur.yüzdesi
REJECT_VALUEsabit değer değil yüzde değeridir. Başarısız satırların yüzdesireject_value aşı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.
içinREJECT_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.
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 1.000 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 üç REJECT seçeneğin birbiriyle nasıl etkileşime geçtiğini 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ülür.
İzinler
Bu kullanıcı izinlerini gerektirir:
CREATE TABLEALTER ANY SCHEMAALTER ANY EXTERNAL DATA SOURCEALTER ANY EXTERNAL FILE FORMATCONTROL DATABASE
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
bu ALTER ANY EXTERNAL DATA SOURCE izin, 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, gibi içeri aktarma senaryosunda SELECT INTO FROM EXTERNAL TABLEPolyBase 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 eylem, koşul aşağı gönderme olarak bilinir. 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.
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ı.
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 (13.x), PolyBase'in tablo tanımına göre tek bir geçerli satırın en büyük boyutuna göre satır genişliği sınırı 32 KB'tır. 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
Nesne üzerinde SCHEMARESOLUTION 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 AS cs
INNER JOIN [User] AS 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
- HARICI VERI KAYNAĞI OLUŞTUR (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'da çeşitli dosya biçimlerinde 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 . DıŞ VERI KAYNAĞı OLUŞTURMA ve DıŞ TABLOYU BıRAKMA.
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ı sağlamanız gerekir.
< > 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 .
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.
Bir klasör olmasını belirtirseniz LOCATION , dış tablodan seçen Azure SQL Yönetilen Örneği'nden gelen 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 ise LOCATION='/webdata/', sorgu dosyasından mydata.txtsatırlar döndürür. Bir alt klasörde olduğu için döndürülmüyor mydata2.txt , gizli bir klasörde olduğu için döndürülmüyor mydata3.txt ve gizli bir dosya olduğu için döndürülmüyor _hidden.txt .
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 komutunu 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 FORMATkullanın.
İzinler
Bu kullanıcı izinlerini gerektirir:
CREATE TABLEALTER ANY SCHEMAALTER ANY EXTERNAL DATA SOURCEALTER ANY EXTERNAL FILE FORMAT-
CONTROL DATABASEizinleri 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
bu ALTER ANY EXTERNAL DATA SOURCE izin, 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
Nesne üzerinde SCHEMARESOLUTION 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 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 = '<password>';SAS 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 '?'Kimlik 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] );Verileri yerel bir
EXTERNAL TABLEtablo gibi sorgulamak için birEXTERNAL FILE FORMATve 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 ); --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 ( DATA_SOURCE = NYCTaxiExternalDataSource, LOCATION = 'yellow/puYear = */puMonth = */*.parquet', FILE_FORMAT = MyFileFormat ); --Then, query the data via an external table with T-SQL: SELECT TOP 10 * FROM tbl_TaxiRides;
İ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ı
- HARICI VERI KAYNAĞI OLUŞTUR (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:
SQL Server
SQL Veritabanı
Azure SQL Yönetilen Örneği
* Fabric SQL veritabanı *
Azure Synapse'i
Analiz
Genel Bakış: Microsoft Fabric'te SQL veritabanı
Dış tablo oluşturur.
Veri sanallaştırma (önizleme) ile kullanmak için.
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 SQL, dosya veya klasörle ilgili temel istatistiklerin yanı sıra yalnızca tablo meta verilerini depolar. Dış tablolar oluşturulduğunda Doku'daki 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ı sağlamanız gerekir.
< > 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 dış tablolardaki sütunlar için desteklenmez:
- coğrafya
- geometri
- hierarchyid
- resim
- Metin
- ntext
- xml
- json
- Kullanıcı tanımlı herhangi bir tür
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'
Microsoft Fabric'te OneLake'teki gerçek veriler için klasörü veya dosya yolunu ve dosya adını belirtir.
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 komutunu 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 FORMATkullanın.
İ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 veya REVOKE kullanınGRANT. 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:
CREATE TABLEALTER ANY SCHEMAALTER ANY EXTERNAL DATA SOURCEALTER ANY EXTERNAL FILE FORMAT-
CONTROL DATABASEizinleri 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 izni olmalıdır.
Önemli
bu ALTER ANY EXTERNAL DATA SOURCE izin, 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
Nesne üzerinde SCHEMARESOLUTION 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, 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.
Fabric SQL veritabanı, veri kaynağı olarak yalnızca Microsoft Fabric'te OneLake'i destekler.
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
deyimi yürütülürken CREATE EXTERNAL TABLE , 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
Şu anda Doku SQL veritabanında csv dosyasını işaret eden bir Dış Tablo oluştururken, tablo şemasını sağlamanız gerekir; örneğin: SELECT * FROM [schema].[table_name]. Aksi takdirde, aşağıdaki hata iletisi görüntülenir:
Msg 208, Level 16, State 160, Line 1: Invalid object name 'SQLdatabase-id'
Dış tablonun verileri Veritabanı Altyapısı'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.
Örnekler
A. Microsoft Fabric'te OneLake'te bulunan parquet dosyasını hedefleyen bir dış tablo oluşturma
CREATE EXTERNAL DATA SOURCE [MainLakeHouse]
WITH (
LOCATION = 'abfss://<WorkspaceID>@<tenant>.dfs.fabric.microsoft.com/<Lakehouse_id'
);
GO
CREATE EXTERNAL FILE FORMAT [Parquetff]
WITH (
FORMAT_TYPE = PARQUET
);
GO
CREATE EXTERNAL TABLE Customer_parquet
(
CustomerKey INT,
GeoAreaKey INT,
StartDT DATETIME2,
EndDT DATETIME2,
Continent NVARCHAR (50),
Gender NVARCHAR (10),
Title NVARCHAR (10),
GivenName NVARCHAR (100),
MiddleInitial VARCHAR (2),
Surname NVARCHAR (100),
StreetAddress NVARCHAR (200),
City NVARCHAR (100),
State NVARCHAR (100),
StateFull NVARCHAR (100),
ZipCode NVARCHAR (20),
Country_Region NCHAR (2),
CountryFull NVARCHAR (100),
Birthday DATETIME2,
Age INT,
Occupation NVARCHAR (100),
Company NVARCHAR (100),
Vehicle NVARCHAR (100),
Latitude DECIMAL (10, 6),
Longitude DECIMAL (10, 6)
)
WITH (
DATA_SOURCE = MainLakeHouse,
LOCATION = '/Files/parquet/customer.parquet',
FILE_FORMAT = [parquetff]
);
GO
SELECT *
FROM Customer_parquet;