Aracılığıyla paylaş


HARICI TABLOYU SEÇIP OLUŞTUR (CETAS) (Transact-SQL)

Şunlar için geçerlidir: SQL Server 2022 (16.x) ve sonraki sürümleri Azure Synapse Analytics AnalyticsPlatform Sistemi (PDW)

Bir dış tablo oluşturur ve ardından Transact-SQL SELECT deyiminin sonuçlarını paralel olarak dışarı aktarır.

  • Azure Synapse Analytics ve Analytics Platform Sistemi Hadoop veya Azure Blob depolamayı destekler.
  • SQL Server 2022 (16.x) ve sonraki sürümler (CETAS) bir dış tablo oluşturmayı ve ardından Transact-SQL SELECT deyiminin paralel olarak Azure Data Lake Storage (ADLS) 2. Nesil, Azure Depolama Hesabı V2 ve S3 uyumlu nesne depolama alanına dışarı aktarmasını destekler CREATE EXTERNAL TABLE AS SELECT .

Uyarı

Azure SQL Yönetilen Örneği için CETAS'ın özellikleri ve güvenliği SQL Server veya Azure Synapse Analytics'ten farklıdır. Daha fazla bilgi için CREATE EXTERNAL TABLE AS SELECT'in Azure SQL Yönetilen Örneği sürümüne bakın.

Uyarı

Azure Synapse Analytics'teki sunucusuz havuzlar için CETAS'ın özellikleri ve güvenliği SQL Server'dan farklıdır. Daha fazla bilgi için bkz. Synapse SQL ile CETAS.

Transact-SQL söz dizimi kuralları

Sözdizimi

CREATE EXTERNAL TABLE { [ [ database_name . [ schema_name ] . ] | schema_name . ] table_name }
    [ (column_name [ , ...n ] ) ]
    WITH (
        LOCATION = 'hdfs_folder' | '<prefix>://<path>[:<port>]' ,
        DATA_SOURCE = external_data_source_name ,
        FILE_FORMAT = external_file_format_name
        [ , <reject_options> [ , ...n ] ]
    )
    AS <select_statement>
[;]

<reject_options> ::=
{
    | REJECT_TYPE = value | percentage
    | REJECT_VALUE = reject_value
    | REJECT_SAMPLE_VALUE = reject_sample_value
}

<select_statement> ::=
    [ WITH <common_table_expression> [ , ...n ] ]
    SELECT <select_criteria>

Tartışmalar

[ database_name . [ schema_name ] . ] | schema_name . ] table_name

Veritabanında oluşturulacak tablonun bir-üç bölümlü adı. Dış tablo için ilişkisel veritabanı yalnızca tablo meta verilerini depolar.

[ ( column_name [ ,... n ] ) ]

Tablo sütununun adı.

KONUM

Şunlar için geçerlidir: Azure Synapse Analytics ve Analytics Platform Sistemi

'hdfs_folder'**
Dış veri kaynağında SELECT deyiminin sonuçlarının yazacağı yeri belirtir. Konum bir klasör adıdır ve isteğe bağlı olarak Hadoop kümesinin veya Blob depolamanın kök klasörüne göre bir yol içerebilir. PolyBase, henüz yoksa yolu ve klasörü oluşturur.

Dış dosyalar öğesine hdfs_folder yazılır ve olarak adlandırılır QueryID_date_time_ID.format; burada ID artımlı tanımlayıcıdır ve format dışarı aktarılan veri biçimidir. QID776_20160130_182739_0.orc bunun bir örneğidir.

KONUM bir klasöre işaret etmeli ve sonunda /bir olmalıdır, örneğin: aggregated_data/.

Şunlar için geçerlidir: SQL Server 2022 (16.x) ve üzeri

prefix://path[:port] bağlantı protokolünün (ön ek), yolun ve isteğe bağlı olarak bağlantı noktasının, SELECT deyiminin sonucunun yazılacağı dış veri kaynağına sağlar.

Hedef S3 uyumlu nesne depolama alanıysa önce bir demet bulunmalıdır, ancak gerekirse PolyBase alt klasörler oluşturabilir. SQL Server 2022 (16.x), Azure Data Lake Storage 2. Nesil, Azure Depolama Hesabı V2 ve S3 uyumlu nesne depolamayı destekler. ORC dosyaları şu anda desteklenmiyor.

DATA_SOURCE = external_data_source_name

Dış verilerin depolandığı veya depolanacağı konumu içeren dış veri kaynağı nesnesinin adını belirtir. Konum bir Hadoop kümesi veya Azure Blob depolama alanıdır. Dış veri kaynağı oluşturmak için CREATE EXTERNAL DATA SOURCE (Transact-SQL) kullanın.

FILE_FORMAT = external_file_format_name

Dış veri dosyasının biçimini içeren dış dosya biçimi nesnesinin adını belirtir. Dış dosya biçimi oluşturmak için CREATE EXTERNAL FILE FORMAT (Transact-SQL) kullanın.

REDDET seçenekleri

REDDETME seçenekleri, bu CREATE EXTERNAL TABLE AS SELECT deyim çalıştırıldığında geçerli değildir. Bunun yerine, veritabanının dış tablodan verileri içeri aktardığında bunları daha sonra kullanabilmesi için bunlar burada belirtilir. Daha sonra CREATE TABLE AS SELECT deyimi dış tablodan veri seçtiğinde veritabanı, içeri aktarmayı durdurmadan önce içeri aktarılamayacak satırların sayısını veya yüzdesini belirlemek için reddetme seçeneklerini kullanır.

  • REJECT_VALUE = reject_value

    Veritabanı içeri aktarmayı durdurmadan önce içeri aktarılamayan satırların değerini veya yüzdesini belirtir.

  • REJECT_TYPE = değer | Yüzde

    REJECT_VALUE seçeneğinin değişmez değer mi yoksa yüzde mi olduğunu açıklar.

    • değer

      REJECT_VALUE yüzde değil değişmez değerse kullanılır. Başarısız satır sayısı reject_value aşıldığında veritabanı dış veri dosyasındaki satırları içeri aktarmayı durdurur.

      Örneğin, ve REJECT_VALUE = 5iseREJECT_TYPE = value, beş satır içeri aktarılamadıktan sonra veritabanı satırları içeri aktarmayı durdurur.

    • Yüzde

      REJECT_VALUE değişmez değer değil yüzde ise kullanılır. Başarısız satırların yüzdesireject_value aşıldığında veritabanı dış veri dosyasındaki satırları içeri aktarmayı durdurur. Başarısız satırların yüzdesi aralıklarla hesaplanır. Yalnızca olduğunda TYPE=HADOOPayrılmış SQL havuzlarında geçerlidir.

  • REJECT_SAMPLE_VALUE = reject_sample_value

    REJECT_TYPE = percentagegerekir. Veritabanı başarısız satırların yüzdesini yeniden hesaplamadan önce içeri aktarmaya çalışacak satır sayısını belirtir.

    Örneğin, REJECT_SAMPLE_VALUE = 1000 ise veritabanı, 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 veritabanı 1.000 satır daha yüklemeyi dener. Veritabanı, her ek 1.000 satırı içeri aktarmaya çalıştığında başarısız olan satırların yüzdesini yeniden hesaplamaya devam eder.

    Uyarı

    Veritabanı, başarısız satırların yüzdesini aralıklarla hesapladığı için, başarısız satırların gerçek yüzdesi reject_value aşabilir.

    Örnek:

    Bu örnekte, üç REDDET seçeneğinin birbiriyle nasıl etkileşimde olduğu gösterilmektedir. Örneğin, ise REJECT_TYPE = percentage, REJECT_VALUE = 30, REJECT_SAMPLE_VALUE = 100aşağıdaki senaryo gerçekleşebilir:

    • Veritabanı, 25'i başarısız, 75'i başarılı olmak üzere ilk 100 satırı yüklemeyi dener.
    • Başarısız satırların yüzdesi 25%olarak hesaplanır ve bu değer 30%reddetme değerinden küçüktür. Dolayısıyla yükü durdurmanız gerekmez.
    • Veritabanı sonraki 100 satırı yüklemeyi dener. Bu kez 25 başarılı ve 75 başarısız.
    • 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ı.
    • Belirtilen 30% sınırından daha büyük olan 200 satır yüklenmeye çalışıldıktan sonra yük 50% başarısız satırla başarısız olur.

ILE common_table_expression

Ortak tablo ifadesi (CTE) olarak bilinen geçici adlandırılmış bir sonuç kümesi belirtir. Daha fazla bilgi için bkz . WITH common_table_expression (Transact-SQL)

SELECT <select_criteria>

Yeni tabloyu select deyiminin sonuçlarıyla doldurur. select_criteria , yeni tabloya kopyalanacak verileri belirleyen SELECT deyiminin gövdesidir. SELECT deyimleri hakkında bilgi için bkz. SELECT (Transact-SQL).

Uyarı

SELECT'deki ORDER BY yan tümcesi CETAS üzerinde hiçbir etkiye sahip değildir.

Sütun seçenekleri

  • column_name [ ,... n ]

    Sütun adları CREATE TABLE'da belirtilen sütun seçeneklerine izin vermez. Bunun yerine, yeni tablo için bir veya daha fazla sütun adının isteğe bağlı bir listesini sağlayabilirsiniz. Yeni tablodaki sütunlar belirttiğiniz adları kullanır. Sütun adlarını belirttiğinizde, sütun listesindeki sütun sayısı seçim sonuçlarındaki sütun sayısıyla eşleşmelidir. Herhangi bir sütun adı belirtmezseniz, yeni hedef tablo select deyimi sonuçlarındaki sütun adlarını kullanır.

    Veri türleri, harmanlama veya null atanabilirlik gibi diğer sütun seçeneklerini belirtemezsiniz. Bu özniteliklerin her biri SELECT deyiminin sonuçlarından türetilir. Ancak, öznitelikleri değiştirmek için SELECT deyimini kullanabilirsiniz. Bir örnek için bkz. Sütun özniteliklerini değiştirmek için CETAS kullanma.

İzinler

Bu komutu çalıştırmak için veritabanı kullanıcısının tüm bu izinlere veya üyeliklere ihtiyacı vardır:

  • db_ddladmin sabit veritabanı rolünde yeni tabloyu veya üyeliği içerecek yerel şemada ALTER SCHEMA izni.
  • db_ddladmin sabit veritabanı rolünde CREATE TABLE izni veya üyeliği.
  • select_criteria başvuruda bulunan nesneler üzerinde SELECT izni.

Oturum açma için şu izinlerin tümü gerekir:

  • TOPLU İŞLEMLERI YÖNETME
  • DıŞ VERI KAYNAĞı DEĞIŞTIRME
  • HERHANGI BIR DıŞ DOSYA BIÇIMINI DEĞIŞTIRME
  • Genel olarak, Klasör içeriğini listeleme ve CETAS için LOCATION klasörüne yazma izinlerine sahip olmanız gerekir.
  • Azure Synapse Analytics ve Analytics Platform Sistemi'nde Hadoop kümesindeki veya Azure Blob depolama alanındaki dış klasöre okuma ve yazma izni yazın.
  • SQL Server 2022'de (16.x), dış konumda uygun izinleri ayarlamak da gerekir. Verileri konuma çıkarmak için yazma izni ve verilere erişmek için Okuma izni.
  • Azure Blob Depolama ve Azure Data Lake 2 SHARED ACCESS SIGNATURE . Nesil için belirtecin kapsayıcıda şu ayrıcalıklara sahip olması gerekir: Okuma, Yazma, Listeleme, Oluşturma.
  • Azure Blog Depolama için SAS belirtecini Allowed Servicesoluşturmak için : Blob onay kutusunun seçilmesi gerekir.
  • Azure Data Lake 2. Nesil için SAS belirtecini Allowed Servicesoluşturmak için ve ContainerObject onay kutularının seçilmesi gerekir.

Önemli

ALTER ANY EXTERNAL DATA SOURCE izni, herhangi bir sorumluya herhangi bir dış veri kaynağı nesnesi oluşturma ve değiştirme olanağı verir, 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 yalnızca sistemdeki güvenilir sorumlulara verilmelidir.

Hata yönetimi

Verileri metinle ayrılmış bir dosyaya aktardığınızda CREATE EXTERNAL TABLE AS SELECT , dışarı aktarılmayan satırlar için reddetme dosyası yoktur.

Dış tabloyu oluşturduğunuzda, veritabanı dış konuma bağlanmayı dener. Bağlantı başarısız olursa, komut başarısız olur ve dış tablo oluşturulmaz. Veritabanı bağlantıyı en az üç kez yeniden denemesi nedeniyle komutun başarısız olması bir dakika veya daha fazla sürebilir.

İptal CREATE EXTERNAL TABLE AS SELECT edilir veya başarısız olursa, veritabanı dış veri kaynağında önceden oluşturulmuş yeni dosya ve klasörleri kaldırmaya bir kerelik bir girişimde bulunur.

Azure Synapse Analytics ve Analytics Platform Sistemi'nde veritabanı, veri dışarı aktarma sırasında dış veri kaynağında oluşan Java hatalarını bildirir.

Açıklamalar

CREATE EXTERNAL TABLE AS SELECT Deyimi tamamlandıktan sonra dış tabloda Transact-SQL sorgular çalıştırabilirsiniz. CREATE TABLE AS SELECT deyimini kullanarak içeri aktarmadığınız sürece bu işlemler sorgu süresince verileri veritabanına aktarır.

Dış tablo adı ve tanımı veritabanı meta verilerinde depolanır. Veriler dış veri kaynağında depolanır.

Deyimi CREATE EXTERNAL TABLE AS SELECT , kaynak tablo bölümlenmiş olsa bile her zaman bölümlenmemiş bir tablo oluşturur.

SQL Server 2022 (16.x) için seçeneği allow polybase export kullanılarak sp_configureetkinleştirilmelidir. Daha fazla bilgi için bkz. Yapılandırmayı ayarlama allow polybase export seçeneği.

EXPLAIN ile oluşturulan Azure Synapse Analytics ve Analytics Platform Sistemi'ndeki sorgu planları için veritabanı dış tablolar için şu sorgu planı işlemlerini kullanır: Dış karıştırma taşıma, Dış yayın taşıma, Dış bölüm taşıma.

Analiz Platformu Sistemi'nde, dış tablo oluşturma önkoşulu olarak alet yöneticisinin Hadoop bağlantısını yapılandırması gerekir. Daha fazla bilgi için, Microsoft İndirme Merkezi'nden indirebileceğiniz Analiz Platformu Sistemi belgelerindeki "Dış Verilere Bağlantıyı Yapılandırma (Analiz Platformu Sistemi)" bölümüne bakın.

Sınırlamalar ve kısıtlamalar

Dış tablo verileri veritabanının dışında bulunduğundan, yedekleme ve geri yükleme işlemleri yalnızca veritabanında depolanan veriler üzerinde çalışır. Sonuç olarak, yalnızca meta veriler yedeklenip geri yüklenir.

Veritabanı, dış tablo içeren bir veritabanı yedeğini geri yüklerken dış veri kaynağına bağlantıyı doğrulamaz. Özgün kaynağa erişilemiyorsa, dış tablonun meta veri geri yüklemesi yine başarılı olur, ancak dış tablodaki SELECT işlemleri başarısız olur.

Veritabanı, veritabanı ile dış veriler arasında veri tutarlılığını garanti etmez. Dış veri ve veritabanı arasındaki tutarlılığı sağlamak yalnızca müşteri tarafından sorumludur.

Veri işleme dili (DML) işlemleri dış tablolarda desteklenmez. Örneğin, dış verileri değiştirmek için Transact-SQL güncelleştirme, ekleme veya silme Transact-SQL deyimlerini kullanamazsınız.

CREATE TABLE, DROP TABLE, CREATE STATISTICS, DROP STATISTICS, CREATE VIEW ve DROP VIEW, dış tablolarda izin verilen tek veri tanımı dili (DDL) işlemleridir.

Uyarı

CETA'larla 1 MB'dan büyük LOB'ları kullanamazsınız.

Azure Synapse Analytics için sınırlamalar ve kısıtlamalar

  • Azure Synapse Analytics ayrılmış SQL havuzları ve Analiz Platformu Sistemi'nde PolyBase, 32 eşzamanlı PolyBase sorgusu çalıştırırken klasör başına en fazla 33.000 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 33.000'den fazla dosya içeren klasörlere karşı PolyBase sorguları çalıştırabilir. Hadoop ve PolyBase kullanıcılarının dosya yollarını kısa tutmalarını ve HDFS klasörü başına en fazla 30.000 dosya kullanmalarını öneririz. Çok fazla dosyaya başvurulduğunda, JVM yetersiz bellek özel durumu oluşur.

  • Sunucusuz SQL havuzlarında, dış tablolar şu anda verinizin bulunduğu bir konumda oluşturulamaz. Verileri depolamak için kullanılan bir konumu yeniden kullanmak için adls'de konumun el ile silinmesi gerekir. Daha fazla sınırlama ve en iyi yöntemler için bkz . Filtre iyileştirme en iyi yöntemleri.

Azure Synapse Analytics ayrılmış SQL havuzları ve Analiz Platformu Sistemi'nde bir RCFile'dan seçim yapıldığında CREATE EXTERNAL TABLE AS SELECT , RCFile'daki sütun değerleri kanal (|) karakterini içermemelidir.

SET ROWCOUNT (Transact-SQL), CREATE EXTERNAL TABLE AS SELECT üzerinde hiçbir etkisi yoktur. Benzer bir davranış elde etmek için TOP (Transact-SQL) kullanın.

Dosya adlarıyla ilgili sınırlamalar için Kapsayıcıları, Blobları ve Meta Verileri Adlandırma ve Başvuruda Bulunma konularını gözden geçirin.

Karakter hataları

Verilerde bulunan aşağıdaki karakterler, ile reddedilen kayıtlar CREATE EXTERNAL TABLE AS SELECT da dahil olmak üzere Parquet dosyalarında hatalara neden olabilir.

Azure Synapse Analytics ve Analytics Platform Sistemi'nde bu durum ORC dosyaları için de geçerlidir.

  • |
  • " (tırnak işareti karakteri)
  • \r\n
  • \r
  • \n

Bu karakterleri içermeyi kullanmak CREATE EXTERNAL TABLE AS SELECT için, önce deyimini CREATE EXTERNAL TABLE AS SELECT çalıştırarak verileri sınırlandırılmış metin dosyalarına dışarı aktarmanız ve ardından bunları bir dış araç kullanarak Parquet veya ORC'ye dönüştürmeniz gerekir.

Parquet ile çalışma

Parquet dosyalarıyla çalışırken, CREATE EXTERNAL TABLE AS SELECT yapılandırılan en yüksek paralellik derecesine (MAXDOP) kadar kullanılabilir CPU başına bir parquet dosyası oluşturur. Her dosya 190 GB'a kadar büyüyebilir, bundan sonra SQL Server gerektiğinde daha fazla Parquet dosyası oluşturur.

Sorgu ipucu OPTION (MAXDOP n) yalnızca öğesinin SELECT bölümünü CREATE EXTERNAL TABLE AS SELECTetkiler. Parquet dosyalarının sayısı üzerinde hiçbir etkisi yoktur. Yalnızca veritabanı düzeyinde MAXDOP ve örnek düzeyi MAXDOP dikkate alınır.

Kilitleme

SCHEMARESOLUTION nesnesinde paylaşılan bir kilit alır.

Desteklenen veri türleri

CETAS, aşağıdaki SQL veri türlerine sahip sonuç kümelerini depolamak için kullanılabilir:

  • ikili
  • varbinary
  • Char
  • Varchar Belediyesi
  • nchar (Unicode karakter tipi)
  • nvarchar
  • küçük tarih
  • tarih
  • tarih/zaman
  • datetime2
  • Datetimeoffset (tarih ve zaman belirteci)
  • Zaman
  • ondalık
  • Sayısal
  • yüzmek
  • gerçek
  • bigint
  • tinyint
  • smallint
  • Int
  • bigint
  • parça
  • para
  • küçükpara

Örnekler

A. CREATE EXTERNAL TABLE AS SELECT kullanarak Hadoop tablosu oluşturma

Şunlar için geçerlidir: Azure Synapse Analytics ve Analytics Platform Sistemi

Aşağıdaki örnek, kaynak tablodaki sütun tanımlarını ve verilerini kullanan adlı hdfsCustomer yeni bir dış tablo dimCustomeroluşturur.

Tablo tanımı veritabanında depolanır ve SELECT deyiminin sonuçları Hadoop dış veri kaynağı /pdwdata/customer.tbl dosyasına aktarılır. Dosya, customer_ff dış dosya biçimine göre biçimlendirilir.

Dosya adı veritabanı tarafından oluşturulur ve dosyayı oluşturan sorguyla hizalamak için sorgu kimliğini içerir.

Customer dizininden önceki yol hdfs://xxx.xxx.xxx.xxx:5000/files/ zaten mevcut olmalıdır. Customer dizini yoksa, veritabanı dizini oluşturur.

Uyarı

Bu örnek 5000 değerini belirtir. Bağlantı noktası belirtilmezse, veritabanı varsayılan bağlantı noktası olarak 8020 kullanır.

Elde edilen Hadoop konumu ve dosya adı olacaktır hdfs:// xxx.xxx.xxx.xxx:5000/files/Customer/ QueryID_YearMonthDay_HourMinutesSeconds_FileIndex.txt..

-- Example is based on AdventureWorks
CREATE EXTERNAL TABLE hdfsCustomer
    WITH (
            LOCATION = '/pdwdata/customer.tbl',
            DATA_SOURCE = customer_ds,
            FILE_FORMAT = customer_ff
            ) AS

SELECT *
FROM dimCustomer;
GO

B. CREATE EXTERNAL TABLE AS SELECT ile sorgu ipucu kullanma

Şunlar için geçerlidir: Azure Synapse Analytics ve Analytics Platform Sistemi

Bu sorgu, deyimiyle bir sorgu birleştirme ipucu kullanmaya yönelik temel söz dizimini CREATE EXTERNAL TABLE AS SELECT gösterir. Sorgu gönderildikten sonra veritabanı, sorgu planını oluşturmak için karma birleştirme stratejisini kullanır. Birleştirme ipuçları ve OPTION yan tümcesini kullanma hakkında daha fazla bilgi için bkz. OPTION Yan Tümcesi (Transact-SQL).

Uyarı

Bu örnek 5000 değerini belirtir. Bağlantı noktası belirtilmezse, veritabanı varsayılan bağlantı noktası olarak 8020 kullanır.

-- Example is based on AdventureWorks
CREATE EXTERNAL TABLE dbo.FactInternetSalesNew
    WITH (
            LOCATION = '/files/Customer',
            DATA_SOURCE = customer_ds,
            FILE_FORMAT = customer_ff
            ) AS

SELECT T1.*
FROM dbo.FactInternetSales T1
INNER JOIN dbo.DimCustomer T2
    ON (T1.CustomerKey = T2.CustomerKey)
OPTION (HASH JOIN);
GO

C. Sütun özniteliklerini değiştirmek için CETAS kullanma

Şunlar için geçerlidir: Azure Synapse Analytics ve Analytics Platform Sistemi

Bu örnek, tablodaki FactInternetSales birkaç sütun için veri türlerini, null atanabilirliği ve harmanlamayı değiştirmek için CETAS kullanır.

-- Example is based on AdventureWorks
CREATE EXTERNAL TABLE dbo.FactInternetSalesNew
    WITH (
            LOCATION = '/files/Customer',
            DATA_SOURCE = customer_ds,
            FILE_FORMAT = customer_ff
            ) AS

SELECT T1.ProductKey AS ProductKeyNoChange,
    T1.OrderDateKey AS OrderDate,
    T1.ShipDateKey AS ShipDate,
    T1.CustomerKey AS CustomerKeyNoChange,
    T1.OrderQuantity AS Quantity,
    T1.SalesAmount AS MONEY
FROM dbo.FactInternetSales T1
INNER JOIN dbo.DimCustomer T2
    ON (T1.CustomerKey = T2.CustomerKey)
OPTION (HASH JOIN);
GO

D. CREATE EXTERNAL TABLE AS SELECT kullanarak verileri parquet olarak dışarı aktarma

Şunlar için geçerlidir: SQL Server 2022 (16.x)

Aşağıdaki örnek, tablosundaki verileri kullanan adlı ext_sales yeni bir dış tablo SalesOrderDetailAdventureWorks2025oluşturur. Polybase dışarı aktarma yapılandırmasına izin ver seçeneği etkinleştirilmelidir.

SELECT deyiminin sonucu, daha önce yapılandırılmış ve adlandırılmış s3_edsS3 uyumlu nesne depolama alanına kaydedilir ve olarak s3_dscdoğru kimlik bilgileri oluşturulur. Parquet dosyası konumu, daha önce oluşturulan depolama demetinin bulunduğu yerdir <ip>:<port>/cetas/sales.parquetcetas .

Uyarı

Delta biçimi şu anda yalnızca salt okunur olarak desteklenmektedir.

-- Credential to access the S3-compatible object storage
CREATE DATABASE SCOPED CREDENTIAL s3_dsc
    WITH IDENTITY = 'S3 Access Key',
        SECRET = '<accesskeyid>:<secretkeyid>'
GO

-- S3-compatible object storage data source
CREATE EXTERNAL DATA SOURCE s3_eds
    WITH (
            LOCATION = 's3://<ip>:<port>',
            CREDENTIAL = s3_dsc
            )

-- External File Format for PARQUET
CREATE EXTERNAL FILE FORMAT ParquetFileFormat
    WITH (FORMAT_TYPE = PARQUET);
GO

CREATE EXTERNAL TABLE ext_sales
    WITH (
            LOCATION = '/cetas/sales.parquet',
            DATA_SOURCE = s3_eds,
            FILE_FORMAT = ParquetFileFormat
            ) AS

SELECT *
FROM AdventureWorks2022.[Sales].[SalesOrderDetail];
GO

E. Delta tablosundan parquet'e SELECT OLARAK CREATE EXTERNAL TABLE kullanma

Şunlar için geçerlidir: SQL Server 2022 (16.x)

Aşağıdaki örnek adlı Delta_to_Parquetyeni bir dış tablo oluşturur ve adlı s3_deltaS3 uyumlu nesne depolama alanında bulunan Delta Tablo türündeki verileri kullanır ve sonucu parquet dosyası olarak adlandırılan s3_parquet başka bir veri kaynağına yazar. Bunun için örnek OPENROWSET komutunu kullanır. Polybase dışarı aktarma yapılandırmasına izin ver seçeneği etkinleştirilmelidir.

-- External File Format for PARQUET
CREATE EXTERNAL FILE FORMAT ParquetFileFormat
    WITH (FORMAT_TYPE = PARQUET);
GO

CREATE EXTERNAL TABLE Delta_to_Parquet
    WITH (
            LOCATION = '/backup/sales.parquet',
            DATA_SOURCE = s3_parquet,
            FILE_FORMAT = ParquetFileFormat
            ) AS

SELECT *
FROM OPENROWSET(BULK '/delta/sales_fy22/', FORMAT = 'DELTA', DATA_SOURCE = 's3_delta') AS [r];
GO

F. Kaynak olarak görünümle CREATE EXTERNAL TABLE AS SELECT kullanma

Şunlar için geçerlidir: Azure Synapse Analytics sunucusuz SQL havuzları ve ayrılmış SQL havuzları.

Kimlik doğrulaması ve abfs: uç nokta için yönetilen kimlik kullanarak kaynak olarak kullanıcı tanımlı bir görünümle CETAS yazmak için aşağıdaki örneği şablon olarak kullanın:

CREATE DATABASE [<mydatabase>];
GO

USE [<mydatabase>];
GO

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<strong password>';

CREATE DATABASE SCOPED CREDENTIAL [WorkspaceIdentity] WITH IDENTITY = 'managed identity';
GO

CREATE EXTERNAL FILE FORMAT [ParquetFF] WITH (
    FORMAT_TYPE = PARQUET,
    DATA_COMPRESSION = 'org.apache.hadoop.io.compress.SnappyCodec'
);
GO

CREATE EXTERNAL DATA SOURCE [SynapseSQLwriteable] WITH (
    LOCATION = 'abfs[s]://<file_system>@<account_name>.dfs.core.windows.net/<path>/<file_name>',
    CREDENTIAL = [WorkspaceIdentity]
);
GO

CREATE EXTERNAL TABLE [dbo].[<myexternaltable>] WITH (
        LOCATION = '<myoutputsubfolder>/',
        DATA_SOURCE = [SynapseSQLwriteable],
        FILE_FORMAT = [ParquetFF]
) AS
SELECT * FROM [<myview>];
GO

G. Kaynak olarak görünümle CREATE EXTERNAL TABLE AS SELECT kullanma

Şunlar için geçerlidir: Azure Synapse Analytics sunucusuz SQL havuzları ve ayrılmış SQL havuzları.

Bu örnekte, kaynak olarak kullanıcı tanımlı bir görünümle CETAS yazmak, yönetilen kimliği kimlik doğrulaması olarak kullanmak ve https:için bir şablon kodu örneği görebiliriz.

CREATE DATABASE [<mydatabase>];
GO

USE [<mydatabase>];
GO

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<strong password>';

CREATE DATABASE SCOPED CREDENTIAL [WorkspaceIdentity] WITH IDENTITY = 'managed identity';
GO

CREATE EXTERNAL FILE FORMAT [ParquetFF] WITH (
    FORMAT_TYPE = PARQUET,
    DATA_COMPRESSION = 'org.apache.hadoop.io.compress.SnappyCodec'
);
GO

CREATE EXTERNAL DATA SOURCE [SynapseSQLwriteable] WITH (
    LOCATION = 'https://<mystoageaccount>.dfs.core.windows.net/<mycontainer>/<mybaseoutputfolderpath>',
    CREDENTIAL = [WorkspaceIdentity]
);
GO

CREATE EXTERNAL TABLE [dbo].[<myexternaltable>] WITH (
        LOCATION = '<myoutputsubfolder>/',
        DATA_SOURCE = [SynapseSQLwriteable],
        FILE_FORMAT = [ParquetFF]
) AS
SELECT * FROM [<myview>];
GO

Sonraki Adımlar

Şunlar için geçerlidir:Azure SQL Managed Instance

Bir dış tablo oluşturur ve ardından Transact-SQL SELECT deyiminin sonuçlarını paralel olarak dışarı aktarır.

Aşağıdaki görevleri tamamlamak için (CETAS) kullanabilirsiniz CREATE EXTERNAL TABLE AS SELECT :

  • Azure Blob depolama veya Azure Data Lake Storage (ADLS) 2. Nesil'de Parquet veya CSV dosyalarının üzerinde bir dış tablo oluşturun.
  • T-SQL SELECT deyiminin sonuçlarını paralel olarak oluşturulan dış tabloya aktarın.
  • Azure SQL Yönetilen Örneği'nin daha fazla veri sanallaştırma özelliği için bkz. Azure SQL Yönetilen Örneği ile veri sanallaştırma.

Uyarı

Bu içerik yalnızca Azure SQL Yönetilen Örneği için geçerlidir. Diğer platformlar için açılan seçiciden CREATE EXTERNAL TABLE AS SELECT'in uygun sürümünü seçin.

Transact-SQL söz dizimi kuralları

Sözdizimi

CREATE EXTERNAL TABLE [ [database_name  . [ schema_name ] . ] | schema_name . ] table_name
    WITH (
        LOCATION = 'path_to_folder/',  
        DATA_SOURCE = external_data_source_name,  
        FILE_FORMAT = external_file_format_name
        [, PARTITION ( column_name [ , ...n ] ) ]
)
    AS <select_statement>  
[;]

<select_statement> ::=  
    [ WITH <common_table_expression> [ ,...n ] ]  
    SELECT <select_criteria>

Tartışmalar

[ database_name . [ schema_name ] . ] | schema_name . ] table_name

Oluşturulacak tablonun bir ile üç bölümlü adı. Dış tablo için yalnızca tablo meta verileri depolanır. Hiçbir gerçek veri taşınmaz veya depolanmaz.

KONUM = 'path_to_folder'

Dış veri kaynağında SELECT deyiminin sonuçlarının yazacağı yeri belirtir. Kök klasör, dış veri kaynağında belirtilen veri konumudur. KONUM bir klasöre işaret etmeli ve sonunda /bir olmalıdır. Örnek: aggregated_data/.

CETAS için hedef klasör boş olmalıdır. Yol ve klasör zaten yoksa, bunlar otomatik olarak oluşturulur.

DATA_SOURCE = external_data_source_name

Dış verilerin depolanacağı konumu içeren dış veri kaynağı nesnesinin adını belirtir. Dış veri kaynağı oluşturmak için CREATE EXTERNAL DATA SOURCE (Transact-SQL) kullanın.

FILE_FORMAT = external_file_format_name

Dış veri dosyasının biçimini içeren dış dosya biçimi nesnesinin adını belirtir. Dış dosya biçimi oluşturmak için CREATE EXTERNAL FILE FORMAT (Transact-SQL) kullanın. Şu anda yalnızca FORMAT_TYPE=PARQUET ve FORMAT_TYPE=DELIMITEDTEXT içeren dış dosya biçimleri desteklenmektedir. DELIMITEDTEXT biçimi için GZip sıkıştırması desteklenmez.

[, BÖLÜM ( sütun adı [ , ... n ] ) ]

Çıkış verilerini birden çok parquet dosya yoluna böler. Bölümleme belirli sütunlara ()column_name göre gerçekleşir ve LOCATION içindeki joker karakterler (*) ilgili bölümleme sütunuyla eşleştirildi. BÖLÜM bölümündeki sütun sayısı, KONUM'daki joker karakter sayısıyla eşleşmelidir. Bölümleme için kullanılmayan en az bir sütun olmalıdır.

ILE< common_table_expression>

Ortak tablo ifadesi (CTE) olarak bilinen geçici adlandırılmış bir sonuç kümesi belirtir. Daha fazla bilgi için bkz. WITH common_table_expression (Transact-SQL).

SELECT <select_criteria>

Yeni tabloyu select deyiminin sonuçlarıyla doldurur. select_criteria , yeni tabloya kopyalanacak verileri belirleyen SELECT deyiminin gövdesidir. SELECT deyimleri hakkında bilgi için bkz. SELECT (Transact-SQL).

Uyarı

SELECT'teki ORDER BY yan tümcesi CETAS için desteklenmez.

İzinler

Depolama izinleri

CETAS'ın çalışması için klasör içeriğini listeleme ve KONUM yoluna yazma izinlerinizin olması gerekir.

Desteklenen kimlik doğrulama yöntemleri yönetilen kimlik veya Paylaşılan Erişim İmzası (SAS) belirtecidir.

  • Kimlik doğrulaması için yönetilen kimlik kullanıyorsanız, SQL yönetilen örneğinizin hizmet sorumlusunun hedef kapsayıcıda Depolama Blob Verileri Katkıda Bulunanı rolüne sahip olduğundan emin olun.
  • SAS belirteci kullanıyorsanız Okuma, Yazma ve Liste izinleri gereklidir.
  • Azure Blog Depolama için SAS belirtecini Allowed Servicesoluşturmak için : Blob onay kutusunun seçilmesi gerekir.
  • Azure Data Lake 2. Nesil için SAS belirtecini Allowed Servicesoluşturmak için ve ContainerObject onay kutularının seçilmesi gerekir.

Kullanıcı tarafından atanan yönetilen kimlik desteklenmez. Microsoft Entra geçiş kimlik doğrulaması desteklenmez. Microsoft Entra Id is (eski adıyla Azure Active Directory).

SQL yönetilen örneğindeki izinler

Bu komutu çalıştırmak için veritabanı kullanıcısının tüm bu izinlere veya üyeliklere ihtiyacı vardır:

  • db_ddladmin sabit veritabanı rolünde yeni tabloyu veya üyeliği içerecek yerel şemada ALTER SCHEMA izni.
  • db_ddladmin sabit veritabanı rolünde CREATE TABLE izni veya üyeliği.
  • select_criteria başvuruda bulunan nesneler üzerinde SELECT izni.

Oturum açma için şu izinlerin tümü gerekir:

  • TOPLU İŞLEMLERI YÖNETME
  • DıŞ VERI KAYNAĞı DEĞIŞTIRME
  • HERHANGI BIR DıŞ DOSYA BIÇIMINI DEĞIŞTIRME

Önemli

ALTER ANY EXTERNAL DATA SOURCE izni, herhangi bir sorumluya herhangi bir dış veri kaynağı nesnesi oluşturma ve değiştirme olanağı verir, 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 yalnızca sistemdeki güvenilir sorumlulara verilmelidir.

Desteklenen veri türleri

CETAS aşağıdaki SQL veri türlerine sahip sonuç kümelerini depolar:

  • ikili
  • varbinary
  • Char
  • Varchar Belediyesi
  • nchar (Unicode karakter tipi)
  • nvarchar
  • smalldatetime
  • tarih
  • tarih/zaman
  • datetime2
  • Datetimeoffset (tarih ve zaman belirteci)
  • Zaman
  • ondalık
  • Sayısal
  • yüzmek
  • gerçek
  • bigint
  • tinyint
  • smallint
  • Int
  • bigint
  • parça
  • para
  • küçükpara

Uyarı

1 MB'tan büyük LOB'lar CETAS ile kullanılamaz.

Sınırlamalar ve kısıtlamalar

  • CREATE EXTERNAL TABLE AS SELECT Azure SQL Yönetilen Örneği için (CETAS) varsayılan olarak devre dışıdır. Daha fazla bilgi için varsayılan olarak devre dışı bırakılan sonraki bölüme bakın.
  • Azure SQL Yönetilen Örneği'nde veri sanallaştırmayla ilgili sınırlamalar veya bilinen sorunlar hakkında daha fazla bilgi için bkz. Sınırlamalar ve Bilinen sorunlar.

Dış tablo verileri veritabanının dışında bulunduğundan, yedekleme ve geri yükleme işlemleri yalnızca veritabanında depolanan veriler üzerinde çalışır. Sonuç olarak, yalnızca meta veriler yedeklenip geri yüklenir.

Veritabanı, dış tablo içeren bir veritabanı yedeğini geri yüklerken dış veri kaynağına bağlantıyı doğrulamaz. Özgün kaynağa erişilemiyorsa, dış tablonun meta veri geri yüklemesi yine de başarılı olur, ancak dış tablodaki SELECT işlemleri başarısız olur.

Veritabanı, veritabanı ile dış veriler arasında veri tutarlılığını garanti etmez. Dış veri ve veritabanı arasındaki tutarlılığı sağlamak yalnızca müşteri tarafından sorumludur.

Veri işleme dili (DML) işlemleri dış tablolarda desteklenmez. Örneğin, dış verileri değiştirmek için Transact-SQL güncelleştirme, ekleme veya silme Transact-SQL deyimlerini kullanamazsınız.

CREATE TABLE, DROP TABLE, CREATE STATISTICS, DROP STATISTICS, CREATE VIEW ve DROP VIEW, dış tablolarda izin verilen tek veri tanımı dili (DDL) işlemleridir.

Dış tablolar, şu anda verinizin bulunduğu bir konumda oluşturulamaz. Verileri depolamak için kullanılan bir konumu yeniden kullanmak için adls'de konumun el ile silinmesi gerekir.

SET ROWCOUNT (Transact-SQL), CREATE EXTERNAL TABLE AS SELECT üzerinde hiçbir etkisi yoktur. Benzer bir davranış elde etmek için TOP (Transact-SQL) kullanın.

Dosya adlarıyla ilgili sınırlamalar için Kapsayıcıları, Blobları ve Meta Verileri Adlandırma ve Başvuruda Bulunma konularını gözden geçirin.

Depolama türleri

Dosyalar Azure Data Lake Storage 2. Nesil veya Azure Blob Depolama depolanabilir. Dosyaları sorgulamak için konumu belirli bir biçimde sağlamanız ve aşağıdaki örnekler gibi dış kaynak ve uç nokta/protokol türüne karşılık gelen konum türü ön ekini kullanmanız gerekir:

--Blob Storage endpoint
abs://<container>@<storage_account>.blob.core.windows.net/<path>/<file_name>.parquet

--Data Lake endpoint
adls://<container>@<storage_account>.blob.core.windows.net/<path>/<file_name>.parquet

Önemli

Sağlanan Konum türü ön eki, iletişim için en uygun protokolü seçmek ve belirli bir depolama türü tarafından sunulan gelişmiş özelliklerden yararlanmak için kullanılır. Genel https:// ön ekin kullanılması devre dışı bırakılır. Uç noktaya özgü ön ekleri her zaman kullanın.

Varsayılan olarak devre dışı

CREATE EXTERNAL TABLE AS SELECT (CETAS), SQL yönetilen örneğinizdeki verileri bir dış depolama hesabına dışarı aktarmanıza olanak tanır, bu nedenle bu özelliklerle veri sızdırma riski olabilir. Bu nedenle CETAS, Azure SQL Yönetilen Örneği için varsayılan olarak devre dışıdır.

CETAS'i etkinleştirme

Azure SQL Yönetilen Örneği için CETAS yalnızca yükseltilmiş Azure izinleri gerektiren bir yöntemle etkinleştirilebilir ve T-SQL aracılığıyla etkinleştirilemez. Yetkisiz veri sızdırma riski nedeniyle CETAS, T-SQL saklı yordamı aracılığıyla sp_configure etkinleştirilemez, ancak bunun yerine SQL yönetilen örneği dışındaki kullanıcı eylemini gerektirir.

CETAS'ı etkinleştirme izinleri

Azure PowerShell aracılığıyla etkinleştirmek için, komutu çalıştıran kullanıcınızın SQL yönetilen örneğiniz için Katkıda Bulunan veya SQL Güvenlik Yöneticisi Azure RBAC rollerine sahip olması gerekir.

Bunun için de özel bir rol oluşturulabilir ve eylem için Okuma ve Microsoft.Sql/managedInstances/serverConfigurationOptions eylemi gerekir.

CETAS'ı etkinleştirme yöntemleri

Bir bilgisayarda PowerShell komutlarını çağırmak için Az package sürüm 9.7.0 veya üzerinin yerel olarak yüklenmesi gerekir. Alternatif olarak, Azure Cloud Shell'i kullanarak Azure PowerShell'i shell.azure.com'da çalıştırabilirsiniz.

İlk olarak Azure'da oturum açın ve aboneliğiniz için uygun bağlamı ayarlayın:

Login-AzAccount
$SubscriptionID = "<YourSubscriptionIDHERE>"
Select-AzSubscription -SubscriptionName $SubscriptionID

Sunucu yapılandırma seçeneğini allowPolybaseExportyönetmek için aşağıdaki PowerShell betiklerini aboneliğinize ve SQL yönetilen örneği adınıza ayarlayın, ardından komutları çalıştırın. Daha fazla bilgi için bkz. Set-AzSqlServerConfigurationOption ve Get-AzSqlServerConfigurationOption.

# Enable ServerConfigurationOption with name "allowPolybaseExport"
Set-AzSqlServerConfigurationOption -ResourceGroupName "resource_group_name" -InstanceName "ManagedInstanceName" `
-Name "allowPolybaseExport" -Value 1

"allowPolybaseExport" sunucu yapılandırma seçeneğini devre dışı bırakmak için:

# Disable ServerConfigurationOption with name "allowPolybaseExport"
Set-AzSqlServerConfigurationOption -ResourceGroupName "resource_group_name" -InstanceName "ManagedInstanceName" `
-Name "allowPolybaseExport" -Value 0

"allowPolybaseExport" sunucu yapılandırma seçeneğinin geçerli değerini almak için:

# Get ServerConfigurationOptions with name "allowPolybaseExport"
Get-AzSqlServerConfigurationOption -ResourceGroupName "resource_group_name" -InstanceName "ManagedInstanceName" `
-Name "allowPolybaseExport"

CETAS'ın durumunu doğrulama

İstediğiniz zaman CETAS yapılandırma seçeneğinin geçerli durumunu kontrol edebilirsiniz.

SQL yönetilen örneğine bağlanın. Aşağıdaki T-SQL'i çalıştırın ve yanıtın value sütununu gözlemleyin. Sunucu yapılandırma değişikliği tamamlandıktan sonra, bu sorgunun sonuçları istediğiniz ayarla eşleşmelidir.

SELECT [name], [value] FROM sys.configurations WHERE name ='allow polybase export';

Sorun giderme

Azure SQL Yönetilen Örneği'nde veri sanallaştırma sorunlarını gidermeye yönelik diğer adımlar için bkz. Sorun giderme. Azure SQL Yönetilen Örneği'nde CETAS için hata işleme ve yaygın hata iletileri aşağıda belirtilmiştir.

Hata yönetimi

Verileri metinle ayrılmış bir dosyaya aktardığınızda CREATE EXTERNAL TABLE AS SELECT , dışarı aktarılmayan satırlar için reddetme dosyası yoktur.

Dış tabloyu oluşturduğunuzda, veritabanı dış konuma bağlanmayı dener. Bağlantı başarısız olursa, komut başarısız olur ve dış tablo oluşturulmaz. Veritabanı bağlantıyı en az üç kez yeniden denemesi nedeniyle komutun başarısız olması bir dakika veya daha fazla sürebilir.

Genel hata iletileri

Bu yaygın hata iletileri, Azure SQL Yönetilen Örneği için CETAS için hızlı açıklamalara sahiptir.

  1. Depolama alanında zaten var olan bir konumu belirtme.

    Çözüm: Sorguda depolama konumunu (anlık görüntü dahil) temizleyin veya konum parametresini değiştirin.

    Örnek hata iletisi: Msg 15842: Cannot create external table. External table location already exists.

  2. JSON nesneleri kullanılarak biçimlendirilmiş sütun değerleri.

    Çözüm: Değer sütununu tek bir VARCHAR veya NVARCHAR sütununa ya da açıkça tanımlanmış türlere sahip bir sütun kümesine dönüştürün.

    Örnek hata iletisi: Msg 16549: Values in column value are formatted as JSON objects and cannot be written using CREATE EXTERNAL TABLE AS SELECT.

  3. Konum parametresi geçersiz (örneğin, birden çok //).

    Çözüm: Konum parametresini düzeltin.

    Örnek hata iletisi: Msg 46504: External option 'LOCATION' is not valid. Ensure that the length and range are appropriate.

  4. Gerekli seçeneklerden biri eksik (DATA_SOURCE, FILE_FORMAT, KONUM).

    Çözüm: Eksik parametreyi CETAS sorgusuna ekleyin.

    Örnek hata iletisi: Msg 46505: Missing required external DDL option 'FILE_FORMAT'

  5. Erişim sorunları (geçersiz kimlik bilgileri, süresi dolmuş kimlik bilgileri veya yetersiz izinlere sahip kimlik bilgileri). Alternatif olasılık, SQL yönetilen örneğinin depolama alanından Hata 404 aldığı geçersiz bir yoldur.

    Çözüm: Kimlik bilgisi geçerliliğini ve izinlerini doğrulayın. Alternatif olarak, yolun geçerli olduğunu ve depolamanın mevcut olduğunu doğrulayın. URL yolunu adls://<container>@<storage_account>.blob.core.windows.net/<path>/kullanın.

    Örnek hata iletisi: Msg 15883: Access check for '<Read/Write>' operation against '<Storage>' failed with HRESULT = '0x...'

  6. DATA_SOURCE konum bölümü joker karakterler içerir.

    Çözüm: Joker karakterleri konumdan kaldırın.

    Örnek hata iletisi: Msg 16576: Location provided by DATA_SOURCE '<data source name>' cannot contain any wildcards.

  7. LOCATION parametresindeki joker karakter sayısı ve bölümlenmiş sütun sayısı eşleşmiyor.

    Çözüm: LOCATION'da bölüm sütunlarıyla aynı sayıda joker karakter olduğundan emin olun.

    Örnek hata iletisi: Msg 16577: Number of wildcards in LOCATION must match the number of columns in PARTITION clause.

  8. PARTITION yan tümcesindeki sütun adı listedeki hiçbir sütunla eşleşmiyor.

    Çözüm: BÖLÜM içindeki sütunların geçerli olduğundan emin olun.

    Örnek hata iletisi: Msg 16578: The column name '<column name>' specified in the PARTITION option does not match any column specified in the column list

  9. BÖLÜM listesinde birden çok kez belirtilen sütun.

    Çözüm: PARTITION yan tümcesindeki sütunların benzersiz olduğundan emin olun.

    Örnek hata iletisi: Msg 16579: A column has been specified more than once in the PARTITION list. Column '<column name>' is specified more than once.

  10. BÖLÜM listesinde sütun birden çok kez belirtildi veya SELECT listesindeki hiçbir sütunla eşleşmedi.

    Çözüm: Bölüm listesinde yineleme olmadığından ve bölüm sütunlarının SELECT bölümünde bulunduğundan emin olun.

    Örnek hata iletileri: Msg 11569: Column <column name> has been specified more than once in the partition columns list. Please try again with a valid parameter. veya Msg 11570: Column <column name> specified in the partition columns list does not match any columns in SELECT clause. Please try again with a valid parameter.

  11. BÖLÜM listesindeki tüm sütunları kullanma.

    Çözüm: SELECT bölümündeki sütunlardan en az biri sorgunun BÖLÜM bölümünde olmamalıdır.

    Örnek hata iletisi: Msg 11571: All output columns in DATA_EXPORT query are declared as PARTITION columns. DATA_EXPORT query requires at least one column to export.

  12. Özellik devre dışı bırakıldı.

    Çözüm: Bu makaledeki Varsayılan olarak devre dışı bırak bölümünü kullanarak özelliği etkinleştirin.

    Örnek hata iletisi: Msg 46552: Writing into an external table is disabled. See 'https://go.microsoft.com/fwlink/?linkid=2201073' for more information

Kilitleme

SCHEMARESOLUTION nesnesinde paylaşılan bir kilit alır.

Örnekler

A. Yönetilen kimliği kullanarak dış tablo oluşturmak için CETAS'ı görünümle kullanma

Bu örnek, sistem tarafından yönetilen kimliği kimlik doğrulaması kullanarak kaynak olarak bir görünümle CETAS yazmaya yönelik kod sağlar.

CREATE DATABASE [<mydatabase>];
GO

USE [<mydatabase>];
GO

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<strong password>';

CREATE DATABASE SCOPED CREDENTIAL [WorkspaceIdentity] WITH IDENTITY = 'managed identity';
GO

CREATE EXTERNAL FILE FORMAT [ParquetFF] WITH (
    FORMAT_TYPE = PARQUET,
    DATA_COMPRESSION = 'org.apache.hadoop.io.compress.SnappyCodec'
);
GO

CREATE EXTERNAL DATA SOURCE [SQLwriteable] WITH (
    LOCATION = 'adls://container@mystorageaccount.blob.core.windows.net/mybaseoutputfolderpath',
    CREDENTIAL = [WorkspaceIdentity]
);
GO

CREATE EXTERNAL TABLE [dbo].[<myexternaltable>] WITH (
        LOCATION = '<myoutputsubfolder>/',
        DATA_SOURCE = [SQLwriteable],
        FILE_FORMAT = [ParquetFF]
) AS
SELECT * FROM [<myview>];
GO

B. SAS kimlik doğrulamasıyla dış tablo oluşturmak için CETAS'ı görünümle kullanma

Bu örnek, kimlik doğrulaması olarak SAS belirteci kullanarak kaynak olarak bir görünümle CETAS yazmaya yönelik kod sağlar.

CREATE DATABASE [<mydatabase>];
GO

USE [<mydatabase>];
GO

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<strong password>';

CREATE DATABASE SCOPED CREDENTIAL SAS_token
WITH
  IDENTITY = 'SHARED ACCESS SIGNATURE',
  -- Remove ? from the beginning of the SAS token
  SECRET = '<azure_shared_access_signature>' ;
GO

CREATE EXTERNAL FILE FORMAT [ParquetFF] WITH (
    FORMAT_TYPE = PARQUET,
    DATA_COMPRESSION = 'org.apache.hadoop.io.compress.SnappyCodec'
);
GO

CREATE EXTERNAL DATA SOURCE [SQLwriteable] WITH (
    LOCATION = 'adls://container@mystorageaccount.blob.core.windows.net/mybaseoutputfolderpath',
    CREDENTIAL = [SAS_token]
);
GO

CREATE EXTERNAL TABLE [dbo].[<myexternaltable>] WITH (
        LOCATION = '<myoutputsubfolder>/',
        DATA_SOURCE = [SQLwriteable],
        FILE_FORMAT = [ParquetFF]
) AS
SELECT * FROM [<myview>];
GO

C. Depolamadaki tek bir parquet dosyasında dış tablo oluşturma

Sonraki iki örnek, yerel bir tablodaki verilerin bir kısmını Azure Blob depolama kapsayıcısı üzerinde parquet dosyası olarak depolanan bir dış tabloya nasıl boşaltacaklarını gösterir. Bunlar veritabanıyla AdventureWorks2025 çalışacak şekilde tasarlanmıştır. Bu örnekte, bir dış tablonun tek bir parquet dosyası olarak oluşturulması gösterilmektedir. Burada, bir sonraki örnekte dış tablo oluşturma ve parquet dosyalarıyla birden çok klasöre bölümleme gösterilmektedir.

Aşağıdaki örnek, kimlik doğrulaması için yönetilen kimlik kullanılarak çalışır. Bu nedenle, Azure SQL Yönetilen Örneği hizmet sorumlunuzun Azure Blob Depolama Kapsayıcınızda Depolama Blob Verileri Katkıda Bulunanı rolüne sahip olduğundan emin olun. Alternatif olarak, örneği değiştirebilir ve kimlik doğrulaması için Paylaşılan Erişim Gizli Anahtarı (SAS) belirteçlerini kullanabilirsiniz.

Aşağıdaki örnekte, 1 Ocak 2014'ten eski siparişler için tablodan SalesOrderHeader seçim yaparak Azure Blob Depolama'da tek bir parquet dosyasında bir dış tablo oluşturursunuz:

--Example 1: Creating an external table into a single parquet file on the storage, selecting from SalesOrderHeader table for orders older than 1-Jan-2014:
USE [AdventureWorks2022]
GO

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'Strong Password';
GO

CREATE DATABASE SCOPED CREDENTIAL [CETASCredential]
    WITH IDENTITY = 'managed identity';
GO

CREATE EXTERNAL DATA SOURCE [CETASExternalDataSource]
WITH (
    LOCATION = 'abs://container@storageaccount.blob.core.windows.net',
    CREDENTIAL = [CETASCredential] );
GO

CREATE EXTERNAL FILE FORMAT [CETASFileFormat]
WITH(
    FORMAT_TYPE=PARQUET,
    DATA_COMPRESSION = 'org.apache.hadoop.io.compress.SnappyCodec'
    );
GO

-- Count how many rows we plan to offload
SELECT COUNT(*) FROM [AdventureWorks2022].[Sales].[SalesOrderHeader] WHERE
        OrderDate < '2013-12-31';

-- CETAS write to a single file, archive all data older than 1-Jan-2014:
CREATE EXTERNAL TABLE SalesOrdersExternal
WITH (
    LOCATION = 'SalesOrders/',
    DATA_SOURCE = [CETASExternalDataSource],
    FILE_FORMAT = [CETASFileFormat])
AS 
    SELECT 
        *
    FROM 
        [AdventureWorks2022].[Sales].[SalesOrderHeader]
    WHERE
        OrderDate < '2013-12-31';

-- you can query the newly created external table
SELECT COUNT (*) FROM SalesOrdersExternal;

D. Bir klasör ağacında depolanan birden çok parquet dosyasında bölümlenmiş dış tablo oluşturma

Bu örnek, bir dış tablo oluşturmayı ve parquet dosyalarıyla birden çok klasöre bölümlemeyi göstermek için önceki örneği temel alır. Veri kümeniz büyükse performans avantajları elde etmek için bölümlenmiş tabloları kullanabilirsiniz.

Örnek B'de yer alan adımları kullanarak verilerden SalesOrderHeader bir dış tablo oluşturun, ancak dış tabloyu yıla ve aya göre OrderDate bölümleyin. Bölümlenmiş dış tabloları sorgularken performans için bölüm eleme özelliğinden yararlanabiliriz.

--CETAS write to a folder hierarchy (partitioned table):
CREATE EXTERNAL TABLE SalesOrdersExternalPartitioned
WITH (
    LOCATION = 'PartitionedOrders/year=*/month=*/', 
    DATA_SOURCE = CETASExternalDataSource,
    FILE_FORMAT = CETASFileFormat,
    --year and month will correspond to the two respective wildcards in folder path    
    PARTITION (
        [Year],
        [Month]
        ) 
    )
AS
    SELECT
        *,
        YEAR(OrderDate) AS [Year],
        MONTH(OrderDate) AS [Month]
    FROM [AdventureWorks2022].[Sales].[SalesOrderHeader]
    WHERE
        OrderDate < '2013-12-31';
GO

-- you can query the newly created partitioned external table
SELECT COUNT (*) FROM SalesOrdersExternalPartitioned;

Sonraki Adımlar