CREATE TABLE ifadesi, bölümlenmemiş, bölümlenmiş, harici veya küme tabanlı tablolar oluşturur.
Sınırlamalar
Bölümlenmiş bir tabloda en fazla 6 bölüm düzeyi bulunabilir. Örneğin, tarihe göre bölümlenmiş bir tabloda
year/month/week/day/hour/minutedüzeyleri kullanılabilir.Varsayılan olarak bir tabloda en fazla 60.000 bölüm bulunabilir. Bu sınır proje bazında yapılandırılabilir.
Diğer tablo sınırlamaları için bkz. SQL sınırlamaları.
Söz dizimi
Dahili tablo
Dahili tablo oluşturma (bölümlenmemiş veya bölümlenmiş)
CREATE [OR REPLACE] TABLE [IF NOT EXISTS] <table_name> (
<col_name> <data_type>, ... )
[COMMENT <table_comment>]
[PARTITIONED BY (<col_name> <data_type> [COMMENT <col_comment>], ...)]
[AUTO PARTITIONED
BY (<auto_partition_expression> [AS <auto_partition_column_name>])
[TBLPROPERTIES('ingestion_time_partition'='true')]
];
Küme tabanlı tablo
Küme tabanlı tablo oluşturma
CREATE TABLE [IF NOT EXISTS] <table_name> (
<col_name> <data_type>, ... )
[CLUSTERED BY | RANGE CLUSTERED BY (<col_name> [, <col_name>, ...])
[SORTED BY (<col_name> [ASC | DESC] [, <col_name> [ASC | DESC] ...])]
INTO <number_of_buckets> BUCKETS];
Harici tablo
Harici tablo oluşturma
Bu örnekte yerleşik metin veri ayrıştırıcısı kullanılarak bir OSS harici tablosu oluşturulur. Diğer biçimler ORC harici tablosu bölümünde ele alınmıştır.
CREATE EXTERNAL TABLE [IF NOT EXISTS] <mc_oss_extable_name> (
<col_name> <data_type>, ... )
STORED AS '<file_format>'
[WITH SERDEPROPERTIES (options)]
LOCATION '<oss_location>';
İşlemsel ve Delta tabloları
-
İşlemsel bir tablo oluşturur. Bu tür bir tabloda UPDATE veya DELETE işlemlerini çalıştırabilirsiniz. Ancak işlemsel tabloların sınırlamaları vardır.
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] <table_name> ( <col_name <data_type> [NOT NULL] [DEFAULT <default_value>] [COMMENT <col_comment>], ... [COMMENT <table_comment>] [TBLPROPERTIES ("transactional"="true")]; -
Delta tablosu oluşturur. Birincil anahtarla birlikte kullanıldığında upsert işlemleri, artımlı sorgular ve zaman yolculuğu gibi işlemler yapabilirsiniz.
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] <table_name> ( <col_name <data_type> [NOT NULL] [DEFAULT <default_value>] [COMMENT <col_comment>], ... [PRIMARY KEY (<pk_col_name>[, <pk_col_name2>, ...] )]) [COMMENT <table_comment>] [CLUSTERED BY (<pk_col_name>[, <pk_col_name2>, ...] )] [TBLPROPERTIES ("transactional"="true" [, "write.bucket.num" = "N", "acid.data.retain.hours"="hours"...])] [LIFECYCLE <days>];-
Birincil anahtarı olan bir Delta tablosunda, birincil anahtarın alt kümesini karma kümeleme anahtarı olarak kullanabilirsiniz.
Birincil anahtarı olan bir Delta tablosunda sistem varsayılan olarak tüm birincil anahtarı kümeleme anahtarı olarak kullanarak karma kümelemeyi uygular. Sorgular sıkça birincil anahtar sütunlarının alt kümesine göre filtreleme yapıyorsa, filtreleme performansını artırmak amacıyla bu alt kümeyi açıkça kümeleme anahtarı olarak belirtin.
-
Kümeleme anahtarını açıkça belirtirseniz sistem tablo verilerini belirtilen sütunlara göre karma paketlere dağıtır. Kümeleme anahtarı, birincil anahtar sütunlarının bir alt kümesi olmalıdır.
Kümeleme anahtarını açıkça belirtmezseniz sistem varsayılan kümeleme anahtarı olarak tüm birincil anahtar sütunlarını kullanır.
Tablo oluşturulduktan sonra kümeleme anahtarını değiştiremezsiniz. Tabloyu oluştururken bunu belirtmeniz gerekir.
-
CTAS ve LIKE yan tümceleri
-
Mevcut bir tabloyu temel alarak yeni bir tablo oluşturur ve verileri kopyalar ancak bölüm özelliklerini kopyalamaz. Bu yan tümce harici tablolara ve harici Lakehouse projelerindeki tablolara uygulanır.
CREATE TABLE [IF NOT EXISTS] <table_name> [LIFECYCLE <days>] AS <select_statement>; -
Mevcut bir tabloyla aynı yapıya sahip yeni bir tablo oluşturur ancak verileri kopyalamaz. Bu yan tümce harici tablolara ve harici Lakehouse projelerindeki tablolara uygulanır.
CREATE TABLE [IF NOT EXISTS] <table_name> [LIFECYCLE <days>] LIKE <existing_table_name>;
Parametreler
Ortak parametreler
Genel parametreler
|
Parametre |
Gerekli mi? |
Açıklama |
Açıklamalar |
|
OR REPLACE |
Hayır |
|
Bu, aşağıdaki komutları çalıştırmaya eşdeğerdir:
|
|
EXTERNAL |
Hayır |
Harici bir tablo oluşturur. |
Yok |
|
IF NOT EXISTS |
Hayır |
Aynı ada sahip bir tablo zaten yoksa tablo oluşturur. |
IF NOT EXISTS olmadan yinelenen adlı bir tablo oluşturulduğunda hata döner. IF NOT EXISTS ile ifade, farklı şemaya sahip aynı adlı bir tablo mevcut olsa bile başarılı olur. Mevcut tablonun meta verileri değişmez. |
|
table_name |
Evet |
Tablonun adı. |
Tablo adı 128 bayt veya daha kısa olmalı ve yalnızca harfler, rakamlar ve alt çizgi (_) içermelidir. Büyük/küçük harfe duyarlı değildir. Adın bir harfle başlaması önerilir. |
|
PRIMARY KEY(pk) |
Hayır |
Tablonun birincil anahtarı. |
Sütun kombinasyonunun benzersizliğini sağlamak için bir veya daha fazla sütunu birincil anahtar olarak tanımlayın. Standart SQL birincil anahtar söz dizimini izler. Birincil anahtar sütunları NOT NULL olarak ayarlanmalıdır ve değiştirilemez. Önemli
Bu parametre yalnızca Delta Tablosu için geçerlidir. |
|
col_name |
Evet |
Sütunun adı. |
|
|
col_comment |
Hayır |
Sütun açıklaması. |
1.024 bayt veya daha kısa bir dize olmalıdır. |
|
data_type |
Evet |
Sütunun veri türü. |
Desteklenen türler: BIGINT, DOUBLE, BOOLEAN, DATETIME, DECIMAL, STRING ve Veri türleri bölümünde listelenen diğerleri. |
|
NOT NULL |
Hayır |
Sütunun NULL değer içeremeyeceğini belirtir. |
NOT NULL özelliğinin nasıl değiştirileceği hakkında daha fazla bilgi için bkz. Bölüm işlemleri. |
|
default_value |
Hayır |
Sütun için varsayılan değer. |
Bir Not
|
|
table_comment |
Hayır |
Tablo açıklaması. |
1.024 bayt veya daha kısa bir dize olmalıdır. |
|
LIFECYCLE |
Hayır |
Tablonun yaşam döngüsü (gün cinsinden). |
Yalnızca pozitif tamsayılar desteklenir. Birim gündür.
|
Bölümlenmiş tablolar
Bölümlenmiş tablo parametreleri
Bölümlenmiş tablo parametreleri
MaxCompute standart ve otomatik bölümlenmiş tabloları destekler. Bölüm sütunlarının nasıl oluşturulduğuna bağlı olarak seçim yapın. Bölümlenmiş tabloya genel bakış.
Standart bölümlenmiş tablo parametreleri
|
Parametre |
Gerekli mi? |
Açıklama |
Açıklamalar |
|
PARTITIONED BY |
Evet |
Standart bölümlenmiş bir tablo için bölümleri belirtir. |
Bölümleri PARTITIONED BY veya AUTO PARTITIONED BY kullanarak belirtebilirsiniz ancak ikisini aynı anda kullanamazsınız. |
|
col_name |
Evet |
Bölüm sütununun adı. |
|
|
data_type |
Evet |
Bölüm sütununun veri türü. |
MaxCompute V1.0 yalnızca STRING türünü destekler. V2.0 TINYINT, SMALLINT, INT, BIGINT ve VARCHAR türlerini ekler (STRING desteklenmeye devam eder). Tam liste için bkz. Veri türleri. Bölümleme, bölüm düzeyindeki işlemler için tam tablo taramalarını ortadan kaldırır. |
|
col_comment |
Hayır |
Bölüm sütunu açıklaması. |
1.024 bayt veya daha kısa bir dize olmalıdır. |
Bir bölüm değeri 255 bayt veya daha kısa olmalıdır. Çince karakterler gibi çift baytlı karakterler içeremez. Değer bir harfle başlamalı ve yalnızca harfler, rakamlar ve şu karakterleri içermelidir: boşluk, iki nokta (:), alt çizgi (_), dolar işareti ($), diyez (#), nokta (.), ünlem işareti (!) ve at işareti (@). Kaçış karakterleri \t, \n ve / gibi diğer karakterlerin davranışı tanımsızdır.
Otomatik bölümlenmiş tablo parametreleri
Otomatik bölümlenmiş tablo, bölüm sütunlarını otomatik olarak oluşturur. Kullanım ayrıntıları için bkz. Bölümlenmiş tablo türleri.
|
|
|
|
|
|
|
|
|
|
|
|
|
Bölüm sütununun nasıl hesaplandığını tanımlayan ifade. Şu anda bölüm sütunu oluşturmak için yalnızca TRUNC_TIME işlevi kullanılabilir. Yalnızca bir bölüm sütunu desteklenir. |
TRUNC_TIME işlevi, belirtilen zaman birimine göre bir tarih veya saat türündeki sütundan verileri keserek bölüm sütunu oluşturabilir. |
|
|
|
Oluşturulan bölüm sütununun adı. Bir ad belirtilmezse sistem varsayılan ad olarak |
|
|
|
|
|
|
Küme tabanlı tablolar
Küme tabanlı tablo parametreleri
Küme tabanlı tablolar karma küme tabanlı ve aralık küme tabanlı olarak kategorize edilir.
Karma küme tabanlı tablo
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Karma paketi sayısını seçerken şu iki ilkeyi izleyin:
Karma paketi boyutunu makul tutun: Her bir karma paketi için önerilen boyut yaklaşık 500 MB'dır. Örneğin, tahmini bölüm boyutu 500 GB ise paket sayısını 1.000 olarak ayarlayın. Bu durumda ortalama karma paketi boyutu yaklaşık 500 MB olur. Çok büyük tablolar için 500 MB sınırını aşabilirsiniz. Paket başına 2 GB ila 3 GB boyut uygundur.
joinişlemlerini optimize etmek için karıştırma ve sıralama adımlarını kaldırmak performansı önemli ölçüde artırır. Bunun için iki tablodaki karma paketi sayılarının birbirinin katı olması gerekir (örneğin 256 ve 512). Karma paketi sayısının 2'nin kuvveti (2n) şeklinde ayarlanması önerilir (örneğin 512, 1024, 2048 veya 4096). Bu, sistemin karma paketlerini otomatik olarak bölüp birleştirerek karıştırma ve sıralama adımlarını kaldırmasına ve yürütme verimliliğini artırmasına olanak tanır.
Aralık küme tabanlı tablo
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Bir aralık küme tabanlı tabloda join veya toplama işlemi gerçekleştirildiğinde, join anahtarı veya grup anahtarı aralık kümeleme anahtarı veya bunun öneki ise veri yeniden dağıtımını (shuffle remove) ortadan kaldırarak performansı artırabilirsiniz. Bu özelliği etkinleştirmek veya devre dışı bırakmak için set odps.optimizer.enable.range.partial.repartitioning=true/false; komutunu çalıştırabilirsiniz. Varsayılan olarak devre dışıdır.
-
Küme tabanlı tabloların avantajları:
Optimize edilmiş paket budama
Optimize edilmiş toplamalar
Optimize edilmiş depolama
-
Küme tabanlı tabloların sınırlamaları:
INSERT INTOdesteklenmez. Verileri yalnızcaINSERT OVERWRITEkullanarak ekleyebilirsiniz.Tunnel aracılığıyla aralık küme tabanlı bir tabloya doğrudan veri yüklenmesi desteklenmez çünkü Tunnel verileri sırasız şekilde yükler.
Yedekleme ve kurtarma özellikleri desteklenmez.
Harici tablolar
Harici tablo parametreleri
Bu bölüm OSS harici tablo parametrelerini kapsar. Diğer harici tablo türleri Harici tablolar bölümünde belgelendirilmiştir.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
İşlemsel ve Delta tabloları
İşlemsel Tablo ve Delta Tablosu parametreleri
Delta Tablosu parametreleri
Delta Tablosu neredeyse gerçek zamanlı okuma ve yazmayı, artımlı depolama ve erişimi ve gerçek zamanlı güncellemeleri destekleyen bir tablo biçimidir. Şu anda yalnızca birincil anahtar tabloları desteklenmektedir.
|
Parametre |
Gerekli mi? |
Açıklama |
Açıklamalar |
|
PRIMARY KEY(PK) |
Evet |
Birden fazla sütun içerebilen Delta Tablosu için birincil anahtarı tanımlar. |
Söz dizimi standart SQL birincil anahtar söz dizimini izler. Birincil anahtar sütunları NOT NULL olarak ayarlanmalıdır ve değiştirilemez. Birincil anahtar ayarlandıktan sonra veriler birincil anahtar sütunlarına göre yinelenmeden arındırılır. Benzersizlik kısıtlaması tek bir bölüm içinde veya bölümlenmemiş bir tablo içinde uygulanır. |
|
transactional |
Evet |
Delta Tablosu oluşturmak için gereklidir. Bu parametreyi |
Tablonun MaxCompute ACID tablolarının işlemsel özelliklerini desteklediğini gösterir. Tablo anlık görüntü yalıtım düzeyini sağlamak için Çok Sürümlü Eşzamanlılık Kontrolü (MVCC) modelini kullanır. |
|
write.bucket.num |
Hayır |
Varsayılan değer 16'dır. Geçerli aralık |
Her bir bölüm veya bölümlenmemiş tablo için paket sayısını belirtir. Bu aynı zamanda veri yazma işlemleri için eşzamanlı düğüm sayısını da gösterir. Bölümlenmiş bir tablo için bu parametreyi değiştirebilirsiniz ve yeni ayar yeni bölümler için geçerli olur. Bölümlenmemiş bir tablo için bu parametreyi değiştiremezsiniz. Aşağıdaki önerileri dikkate alın:
|
|
acid.data.retain.hours |
Hayır |
Varsayılan değer 24'tür. Geçerli aralık |
Zaman Yolculuğu kullanarak geçmiş veri durumlarını sorgulayabileceğiniz saat cinsinden zaman aralığını belirtir. 168 saatten (7 gün) daha uzun bir Zaman Yolculuğu geçmişine ihtiyacınız varsa MaxCompute teknik desteğine başvurun.
|
|
acid.incremental.query.out.of.time.range.enabled |
Hayır |
Varsayılan değer: |
|
|
acid.write.precombine.field |
Hayır |
Tek bir sütun adı belirtir. |
Bir sütun adı belirtilirse sistem aynı işleme içindeki verileri yinelenmeden arındırmak için bu sütunu birincil anahtar sütunlarıyla birlikte kullanır. Bu, veri benzersizliğini ve tutarlılığını sağlar. Not
Tek bir veri işleme 128 MB'yi aşarsa birden çok dosya oluşturulur. Bu parametre birden çok dosya arasında geçerli değildir. |
|
acid.partial.fields.update.enable |
Hayır |
|
Bu parametre tablo oluşturulurken ayarlanır. Tablo oluşturulduktan sonra değiştirilemez. |
-
Delta Tabloları için diğer parametre gereksinimleri:
LIFECYCLE: Tablo yaşam döngüsü zaman yolculuğu saklama süresinden büyük veya buna eşit olmalıdır; yani
lifecycle >= acid.data.retain.hours / 24. Tablo oluşturulurken kontrol yapılır ve bu koşul karşılanmazsa hata raporlanır.Desteklenmeyen özellikler:
CLUSTERED BY,EXTERNALveCREATE TABLE ASdesteklenmez.
-
Diğer sınırlamalar:
Şu anda diğer motorlar doğrudan Delta Tablosu üzerinde işlem gerçekleştiremez. Yalnızca MaxCompute SQL desteklenir.
Standart bir tabloyu Delta Tablosuna dönüştüremezsiniz.
Delta Tablosunun birincil anahtar sütunlarında şema değişiklikleri gerçekleştiremezsiniz.
İşlemsel Tablo parametreleri
|
|
|
|
|
|
|
|
İşlemsel Tablo için aşağıdaki sınırlamalar geçerlidir:
-
transactionalözelliğini yalnızca tablo oluştururken ayarlayabilirsiniz. Mevcut bir tablo için bu özelliği değiştirmek üzereALTER TABLEkullanamazsınız. Aşağıdaki ifade hata döndürür:ALTER TABLE not_txn_tbl SET TBLPROPERTIES("transactional"="true"); -- Error returned. FAILED: Catalog Service Failed, ErrorCode: 151, Error Message: Set transactional is not supported Küme tabanlı bir tabloyu veya harici bir tabloyu İşlemsel Tablo olarak ayarlayamazsınız.
Standart dahili tabloyu, harici tabloyu veya küme tabanlı tabloyu İşlemsel Tabloya veya tersine dönüştüremezsiniz.
Otomatik sıkıştırma desteklenmez. Dosyaları şu konuda açıklandığı gibi manuel olarak sıkıştırın: İşlemsel Tabloda dosyaları sıkıştırma.
merge partitionişlemi desteklenmez.İşlemsel Tablolara diğer sistemlerden erişim sınırlıdır. Örneğin MaxCompute Graph okuma veya yazma işlemlerini desteklemez. Spark ve PAI yalnızca okuma işlemlerini destekler.
Önemli verilerde
update,deleteveyainsert overwriteişlemlerini gerçekleştirmeden önceSELECT...INSERTifadesini kullanarak verileri başka bir tabloya manuel olarak yedekleyin.
Mevcut tablolardan tablo oluşturma
Tablo oluşturma (mevcuttan)
-
CREATE TABLE [IF NOT EXISTS] <table_name> [LIFECYCLE <days>] AS <select_statement>;ifadesini kullanarak başka bir tablo oluşturabilir ve aynı anda verileri yeni tabloya kopyalayabilirsiniz.Bu ifade bölüm özelliklerini kopyalamaz. Kaynak tablonun bölüm sütunları hedef tabloda normal sütun olarak değerlendirilir. Kaynak tablonun yaşam döngüsü özelliği de kopyalanmaz.
lifecycle parametresini kullanarak yeni tablo için bir yaşam döngüsü belirtebilirsiniz. Bu ifade ayrıca dahili bir tablo oluşturmayı ve harici bir tablodan veri kopyalamayı destekler.
-
CREATE TABLE [IF NOT EXISTS] <table_name> [LIFECYCLE <days>] LIKE <existing_table_name>;ifadesini kullanarak mevcut bir tabloyla aynı şemaya sahip yeni bir tablo oluşturabilirsiniz.Bu ifade şemayı kopyalar ancak kaynak tablodan verileri veya yaşam döngüsü özelliğini kopyalamaz.
lifecycle parametresini kullanarak yeni tablo için bir yaşam döngüsü belirtebilirsiniz. Bu ifade ayrıca harici bir tablonun şemasını kopyalayan dahili bir tablo oluşturmayı destekler.
Örnekler
Bölümlenmemiş tablo
-
Bölümlenmemiş bir tablo oluşturun.
CREATE TABLE test1 (key STRING); -
Bölümlenmemiş bir tablo oluşturun ve sütunlar için varsayılan değerler belirtin.
CREATE TABLE test_default( tinyint_name tinyint NOT NULL default 1Y, smallint_name SMALLINT NOT NULL DEFAULT 1S, int_name INT NOT NULL DEFAULT 1, bigint_name BIGINT NOT NULL DEFAULT 1, binary_name BINARY , float_name FLOAT , double_name DOUBLE NOT NULL DEFAULT 0.1, decimal_name DECIMAL(2, 1) NOT NULL DEFAULT 0.0BD, varchar_name VARCHAR(10) , char_name CHAR(2) , string_name STRING NOT NULL DEFAULT 'N', boolean_name BOOLEAN NOT NULL DEFAULT TRUE );
Bölümlenmiş tablo
-
Zaman işlevi kullanarak zamana dayalı bir veri sütununa göre bölümler oluşturan AUTO PARTITION bölümlenmiş bir tablo oluşturun.
-- The sale_date column is truncated by month to generate a partition column named sale_month. The table is then partitioned by this column. CREATE TABLE IF NOT EXISTS auto_sale_detail( shop_name STRING, customer_id STRING, total_price DOUBLE, sale_date DATE ) AUTO PARTITIONED BY (TRUNC_TIME(sale_date, 'month') AS sale_month); -
Veri alım zamanına göre bölümler oluşturan AUTO PARTITION bölümlenmiş bir tablo oluşturun. Sistem verilerin MaxCompute'a yazıldığı zamanı otomatik olarak alır ve bir zaman işlevi kullanarak bölümler oluşturur.
-- After the table is created, when data is written, the system automatically captures the data ingestion time (_partitiontime), truncates it by day, generates a partition column named sale_date, and then partitions the table by this column. CREATE TABLE IF NOT EXISTS auto_sale_detail2( shop_name STRING, customer_id STRING, total_price DOUBLE, _partitiontime TIMESTAMP_NTZ) AUTO PARTITIONED BY (TRUNC_TIME(_partitiontime, 'day') AS sale_date) TBLPROPERTIES('ingestion_time_partition'='true');
Karma veya aralık küme tabanlı tablo
-
Karma küme tabanlı bölümlenmemiş bir tablo oluşturun.
CREATE TABLE t1 (a STRING, b STRING, c BIGINT) CLUSTERED BY (c) SORTED BY (c) INTO 1024 buckets; -
Karma küme tabanlı bölümlenmiş bir tablo oluşturun.
CREATE TABLE t2 (a STRING, b STRING, c BIGINT) PARTITIONED BY (dt STRING) CLUSTERED BY (c) SORTED BY (c) INTO 1024 buckets; -
Aralık küme tabanlı bölümlenmemiş bir tablo oluşturun.
CREATE TABLE t3 (a STRING, b STRING, c BIGINT) RANGE CLUSTERED BY (c) SORTED BY (c) INTO 1024 buckets; -
Aralık küme tabanlı bölümlenmiş bir tablo oluşturun.
CREATE TABLE t4 (a STRING, b STRING, c BIGINT) PARTITIONED BY (dt STRING) RANGE CLUSTERED BY (c) SORTED BY (c);
İşlemsel tablo
-
Bölümlenmemiş işlemsel bir tablo oluşturun.
CREATE TABLE t5(id BIGINT) TBLPROPERTIES ("transactional"="true"); -
Bölümlenmiş işlemsel bir tablo oluşturun.
CREATE TABLE IF NOT EXISTS t6(id BIGINT) PARTITIONED BY (ds STRING) TBLPROPERTIES ("transactional"="true");
Dahili tablo
-
Harici bölümlenmiş bir tablodan veri kopyalayarak dahili bir tablo oluşturun. Dahili tablo bölüm özelliklerini içermez.
-
Bir OSS harici tablosu ve bir MaxCompute dahili tablosu oluşturun. CREATE TABLE AS kullanarak dahili bir tablo oluşturun.
-- Create an OSS external table and insert data into it. CREATE EXTERNAL TABLE max_oss_test(a INT, b INT, c INT) STORED AS TEXTFILE LOCATION "oss://oss-cn-hangzhou-internal.aliyuncs.com/<bucket_name>"; INSERT INTO max_oss_test VALUES (101, 1, 20241108), (102, 2, 20241109), (103, 3, 20241110); SELECT * FROM max_oss_test; -- Result a b c 101 1 20241108 102 2 20241109 103 3 20241110 -- Create an internal table by using CREATE TABLE AS. CREATE TABLE from_exetbl_oss AS SELECT * FROM max_oss_test; -- Query the new internal table. SELECT * FROM from_exetbl_oss; -- The result shows that all data is copied. a b c 101 1 20241108 102 2 20241109 103 3 20241110 -
Dahili tablonun şemasını görüntülemek için
DESC from_exetbl_oss;komutunu çalıştırın. Komut aşağıdaki çıktıyı döndürür.+------------------------------------------------------------------------------------+ | Owner: ALIYUN$*********** | | Project: ***_*****_*** | | TableComment: | +------------------------------------------------------------------------------------+ | CreateTime: 2023-01-10 15:16:33 | | LastDDLTime: 2023-01-10 15:16:33 | | LastModifiedTime: 2023-01-10 15:16:33 | +------------------------------------------------------------------------------------+ | InternalTable: YES | Size: 919 | +------------------------------------------------------------------------------------+ | Native Columns: | +------------------------------------------------------------------------------------+ | Field | Type | Label | Comment | +------------------------------------------------------------------------------------+ | a | string | | | | b | string | | | | c | string | | | +------------------------------------------------------------------------------------+
-
-
Harici bölümlenmiş bir tablodan şema kopyalayarak dahili bir tablo oluşturun. Dahili tablo bölüm özelliklerini içerir.
-
from_exetbl_likedahili tablosunu oluşturun. OSS harici tablosunu MaxCompute üzerinden sorgulayın. CREATE TABLE LIKE kullanarak dahili bir tablo oluşturun.-- Query the OSS external table from MaxCompute. SELECT * FROM max_oss_test; -- Result a b c 101 1 20241108 102 2 20241109 103 3 20241110 -- Create an internal table by using CREATE TABLE LIKE. CREATE TABLE from_exetbl_like LIKE max_oss_test; -- Query the new internal table. SELECT * FROM from_exetbl_like; -- Result: Only the table schema is returned. a b c -
Dahili tablonun şemasını görüntülemek için
DESC from_exetbl_like;komutunu çalıştırın. Komut aşağıdaki çıktıyı döndürür.+------------------------------------------------------------------------------------+ | Owner: ALIYUN$************ | | Project: ***_*****_*** | | TableComment: | +------------------------------------------------------------------------------------+ | CreateTime: 2023-01-10 15:09:47 | | LastDDLTime: 2023-01-10 15:09:47 | | LastModifiedTime: 2023-01-10 15:09:47 | +------------------------------------------------------------------------------------+ | InternalTable: YES | Size: 0 | +------------------------------------------------------------------------------------+ | Native Columns: | +------------------------------------------------------------------------------------+ | Field | Type | Label | Comment | +------------------------------------------------------------------------------------+ | a | string | | | | b | string | | | +------------------------------------------------------------------------------------+ | Partition Columns: | +------------------------------------------------------------------------------------+ | c | string | | +------------------------------------------------------------------------------------+
-
Delta tablosu
-
Delta tablosu oluşturun.
CREATE TABLE mf_tt (pk BIGINT NOT NULL PRIMARY KEY, val BIGINT) TBLPROPERTIES ("transactional"="true"); -
Delta tablosu oluşturun ve temel tablo özelliklerini ayarlayın.
CREATE TABLE mf_tt2 ( pk BIGINT NOT NULL, pk2 BIGINT NOT NULL, val BIGINT, val2 BIGINT, PRIMARY KEY (pk, pk2) ) TBLPROPERTIES ( "transactional"="true", "write.bucket.num" = "64", "acid.data.retain.hours"="120" ) LIFECYCLE 7;
Diğer yöntemler
Mevcut tabloyu değiştirme
-
Orijinal tablo
my_tableöğesini oluşturun ve içine veri ekleyin.CREATE OR REPLACE TABLE my_table(a BIGINT); INSERT INTO my_table(a) VALUES (1),(2),(3); -
Aynı ada sahip yeni bir tablo oluşturmak ve sütunlarını değiştirmek için
OR REPLACEkullanın.CREATE OR REPLACE TABLE my_table(b STRING); -
my_tabletablosunu sorgulayın. Sorgu aşağıdaki sonucu döndürür.+------------+ | b | +------------+ +------------+Aşağıdaki SQL ifadeleri geçersizdir:
CREATE OR REPLACE TABLE IF NOT EXISTS my_table(b STRING); CREATE OR REPLACE TABLE my_table AS SELECT; CREATE OR REPLACE TABLE my_table LIKE newtable;
Verileri kopyalama ve yaşam döngüsü ayarlama
-- Create a new table named sale_detail_ctas1, copy the data from sale_detail to it, and set a lifecycle.
SET odps.sql.allow.fullscan=true;
CREATE TABLE sale_detail_ctas1 LIFECYCLE 10 AS SELECT * FROM sale_detail;
Tablonun şeması ve yaşam döngüsü gibi ayrıntıları görüntülemek için DESC EXTENDED sale_detail_ctas1; komutunu çalıştırın.
Bu örnekte sale_detail bölümlenmiş bir tablodur. sale_detail_ctas1 tablosunu oluşturmak için CREATE TABLE ... AS select_statement ... ifadesini kullandığınızda bölüm özellikleri kopyalanmaz. Kaynak tablodaki bölüm sütunları hedef tabloda normal sütun haline gelir. Bu nedenle sale_detail_ctas1 beş sütunlu bölümlenmemiş bir tablodur.
Sütun değerleri için sabitler kullanma
SELECT yan tümcesinde sütun değerleri olarak sabitler kullanıyorsanız sütun adlarını belirtin. Aksi takdirde oluşturulan sale_detail_ctas3 tablosundaki dördüncü ve beşinci sütunlar _c4 ve _c5 gibi varsayılan adlar alır.
-
Sütun adlarını belirtin.
SET odps.sql.allow.fullscan=true; CREATE TABLE sale_detail_ctas2 AS SELECT shop_name, customer_id, total_price, '2013' AS sale_date, 'China' AS region FROM sale_detail; -
Sütun adlarını belirtmeyin.
SET odps.sql.allow.fullscan=true; CREATE TABLE sale_detail_ctas3 AS SELECT shop_name, customer_id, total_price, '2013', 'China' FROM sale_detail;
Şema kopyalama ve yaşam döngüsü ayarlama
CREATE TABLE sale_detail_like LIKE sale_detail LIFECYCLE 10;
Tablonun şeması ve yaşam döngüsü gibi ayrıntıları görüntülemek için DESC EXTENDED sale_detail_like; komutunu çalıştırın.
sale_detail_like şeması sale_detail şemasıyla aynıdır. Sütun adları, sütun açıklamaları ve tablo açıklamaları gibi tüm özellikler yaşam döngüsü özelliği hariç kopyalanır. Ancak sale_detail içindeki veriler sale_detail_like tablosuna kopyalanmaz.
Harici tablodan şema kopyalama
-- Create a new table named mc_oss_extable_orc_like that has the same schema as the external table mc_oss_extable_orc.
CREATE TABLE mc_oss_extable_orc_like LIKE mc_oss_extable_orc;
Tablonun şeması gibi ayrıntıları görüntülemek için DESC mc_oss_extable_orc_like; komutunu çalıştırın.
+------------------------------------------------------------------------------------+
| Owner: ALIYUN$****@***.aliyunid.com | Project: max_compute_7u************yoq |
| TableComment: |
+------------------------------------------------------------------------------------+
| CreateTime: 2022-08-11 11:10:47 |
| LastDDLTime: 2022-08-11 11:10:47 |
| LastModifiedTime: 2022-08-11 11:10:47 |
+------------------------------------------------------------------------------------+
| InternalTable: YES | Size: 0 |
+------------------------------------------------------------------------------------+
| Native Columns: |
+------------------------------------------------------------------------------------+
| Field | Type | Label | Comment |
+------------------------------------------------------------------------------------+
| id | string | | |
| name | string | | |
+------------------------------------------------------------------------------------+
Yeni veri türleri
SET odps.sql.type.system.odps2=true;
CREATE TABLE test_newtype (
c1 TINYINT,
c2 SMALLINT,
c3 INT,
c4 BIGINT,
c5 FLOAT,
c6 DOUBLE,
c7 DECIMAL,
c8 BINARY,
c9 TIMESTAMP,
c10 ARRAY<MAP<BIGINT,BIGINT>>,
c11 MAP<STRING,ARRAY<BIGINT>>,
c12 STRUCT<s1:STRING,s2:BIGINT>,
c13 VARCHAR(20))
LIFECYCLE 1;
İlgili komutlar
ALTER TABLE: Bir tablonun yapısını veya özelliklerini değiştirir.
TRUNCATE TABLE: Bir tablodaki tüm verileri kaldırır.
DROP TABLE: Bir tabloyu siler.
DESC TABLE/VIEW: MaxCompute dahili tablosu, görünümü, materyalize edilmiş görünümü, harici tablosu, küme tabanlı tablosu veya İşlemsel tablosu hakkında bilgi görüntüler.
SHOW: Bir tablo için SQL DDL ifadesini, bir projedeki tüm tabloları ve görünümleri veya bir tablodaki tüm bölümleri görüntüler.