MaxCompute, mevcut tablolardaki sütunları değiştirmenize olanak tanır. İş gereksinimlerinizi karşılamak için sütun ekleyebilir veya silebilir ve sütun veri türlerini değiştirebilirsiniz.
Komutlar
Aşağıdaki tabloda sütun işlemleri için kullanılan MaxCompute SQL komutları açıklanmaktadır.
Eylemler | Açıklama | Rol | Platform |
Mevcut bölümlenmemiş veya bölümlenmiş bir tabloya sütunlar veya açıklamalar ekler. | Tablo üzerinde Alter iznine sahip kullanıcılar | Bu komutları aşağıdaki platformlarda çalıştırabilirsiniz: | |
Mevcut bölümlenmemiş veya bölümlenmiş bir tablodan sütunları siler. | |||
Mevcut bir sütunun veri türünü değiştirir. | |||
Bir tablodaki belirtilen bir sütunun sırasını ayarlar. | |||
Mevcut bölümlenmemiş veya bölümlenmiş bir tablodaki bir sütunun adını değiştirir. | |||
Mevcut bölümlenmemiş veya bölümlenmiş bir tablodaki bir sütunun açıklamasını değiştirir. | |||
Mevcut bölümlenmemiş veya bölümlenmiş bir tablodaki bir sütunun adını ve açıklamasını aynı anda değiştirir. | |||
Bölüm anahtarı olmayan bir sütunun NOT NULL özelliğini değiştirir. |
Kullanım notları
Şema evrimi; karmaşık veri türlerine sahip sütunlar ekleme, sütunları silme, sütunların sırasını yeniden düzenleme ve sütun veri türlerini değiştirme gibi işlemleri içerir. Sütunların sırasını yeniden düzenlediğinizde, sütun ekleyip ardından sırasını değiştirdiğinizde veya sütunları sildiğinizde tablonun okuma ve yazma davranışı etkilenir ve aşağıdaki kısıtlamalar uygulanır:
İş türü MapReduce 1.0 ise Graph görevleri değiştirilen tablodan veri okuyamaz veya tabloya veri yazamaz.
-
CUPID işleri için yalnızca aşağıdaki Spark sürümleri tablodan veri okuyabilir. Tabloya veri yazamazsınız.
Spark-2.3.0-odps0.34.0
Spark-3.1.1-odps0.34.0
PAI işleri tablodan veri okuyabilir ancak tabloya veri yazamaz.
Hologres işleri için %1,3'ten önceki bir Hologres sürümü kullanıyorsanız, değiştirilen tabloya yabancı tablo olarak başvururken tablodan okuma veya tabloya yazma işlemi yapamazsınız.
Şema evriminden sonra CLONE TABLE desteklenmez.
Şema evrimi gerçekleştiyse Streaming Tunnel bir hata bildirir.
Sütun veya açıklama ekleyin
Mevcut bölümlenmemiş veya bölümlenmiş bir tabloya sütunlar veya açıklamalar ekleyebilirsiniz. Kısıtlamalar hakkında daha fazla bilgi için bkz. Kullanım notları. MaxCompute STRUCT türündeki sütunların eklenmesini destekler; örneğin STRUCT<x: STRING, y: BIGINT> ve MAP<STRING, STRUCT<x: DOUBLE, y: DOUBLE>>.
-
Ön koşullar
Şema evrimini etkinleştirmek için
setproject odps.schema.evolution.enable=true;komutunu çalıştırın.İzinler: Bu proje düzeyinde bir özelliktir. Bu komutu çalıştırmak için proje sahibi olmanız veya proje düzeyinde Super_Administrator ya da Admin rolüne sahip olmanız gerekir. Daha fazla bilgi için bkz. Bir kullanıcıya yerleşik yönetim rolü atayın.
Etkin olma süresi: Değişiklik yaklaşık 10 dakika içinde etkili olur.
-
Sözdizimi
ALTER TABLE <table_name> ADD COLUMNS [IF NOT EXISTS] (<col_name1> <type1> COMMENT ['<col_comment>'] [, <col_name2> <type2> COMMENT '<col_comment>'...] ); -
Parametreler
Parametre
Gerekli
Açıklama
table_name
Evet
Değiştirilecek tablonun adı. Yeni sütunlar tablonun sonuna eklenir.
col_name
Evet
Yeni sütunun adı.
type
Evet
Yeni sütunun veri türü.
col_comment
Hayır
Yeni sütun için açıklama. -
Örnekler
-
Örnek 1: sale_detail tablosuna iki sütun ekleyin.
ALTER TABLE sale_detail ADD COLUMNS IF NOT EXISTS(customer_name STRING, education BIGINT); -
Örnek 2: sale_detail tablosuna açıklamalı iki sütun ekleyin.
ALTER TABLE sale_detail ADD COLUMNS (customer_name STRING COMMENT 'Customer', education BIGINT COMMENT 'Education' ); -
Örnek 3: sale_detail tablosuna karmaşık bir veri türünde sütun ekleyin.
ALTER TABLE sale_detail ADD COLUMNS (region_info struct<province:string, area:string>); -
Örnek 4: Zaten var olan bir sütunu eklemek için IF NOT EXISTS kullanırsanız komut sütunu tekrar eklemeden başarı mesajı döndürür.
-- The statement is successful, but the ID column is not repeatedly added. ALTER TABLE sale_detail ADD COLUMNS IF NOT EXISTS(id bigint); -
Örnek 5: Delta tablosuna bir sütun ekleyin.
CREATE TABLE delta_table_test (pk BIGINT NOT NULL PRIMARY KEY, val BIGINT) TBLPROPERTIES ("transactional"="true"); ALTER TABLE delta_table_test ADD COLUMNS (val2 bigint);
-
Sütunları silin
Mevcut bölümlenmemiş veya bölümlenmiş bir tablodan bir veya daha fazla sütun silebilirsiniz. Kısıtlamalar hakkında daha fazla bilgi için bkz. Kullanım notları.
-
Ön koşullar
Şema evrimini etkinleştirmek için
setproject odps.schema.evolution.enable=true;komutunu çalıştırın.İzinler: Bu proje düzeyinde bir özelliktir. Bu komutu çalıştırmak için proje sahibi olmanız veya proje düzeyinde Super_Administrator ya da Admin rolüne sahip olmanız gerekir. Daha fazla bilgi için bkz. Bir kullanıcıya yerleşik yönetim rolü atayın.
Etkin olma süresi: Değişiklik yaklaşık 10 dakika içinde etkili olur.
-
Sözdizimi
-- Delete a single column. ALTER TABLE <table_name> DROP COLUMN <col_name>; -- Delete multiple columns. ALTER TABLE <table_name> DROP COLUMNS <col_name1>[, <col_name2>...]; -
Parametreler
table_name: Gerekli. Değiştirilecek tablonun adı.
col_name: Gerekli. Silinecek sütunun adı.
-
Örnekler
-- Example 1: Delete the customer_id column from the sale_detail table. ALTER TABLE sale_detail DROP COLUMNS customer_id; -- Example 2: Delete the shop_name and total_price columns from the sale_detail table. ALTER TABLE sale_detail DROP COLUMNS shop_name, total_price;
Sütun veri türlerini değiştirin
Mevcut bir sütunun veri türünü değiştirebilirsiniz. Kısıtlamalar hakkında daha fazla bilgi için bkz. Kullanım notları.
-
Ön koşullar
Şema evrimini etkinleştirmek için
setproject odps.schema.evolution.enable=true;komutunu çalıştırın.İzinler: Bu proje düzeyinde bir özelliktir. Bu komutu çalıştırmak için proje sahibi olmanız veya proje düzeyinde Super_Administrator ya da Admin rolüne sahip olmanız gerekir. Daha fazla bilgi için bkz. Bir kullanıcıya yerleşik yönetim rolü atayın.
Etkin olma süresi: Değişiklik yaklaşık 10 dakika içinde etkili olur.
-
Sözdizimi
ALTER TABLE <table_name> CHANGE [COLUMN] <old_column_name> <new_column_name> <new_data_type>; -
Parametreler
Parametre
Gerekli
Açıklama
table_name
Evet
Sütunu içeren tablonun adı.
old_column_name
Evet
Değiştirilecek sütunun adı.
new_column_name
EvetSütunun yeni adı.
old_column_name ile new_column_name aynı olabilir; bu durum sütun adının değiştirilmediğini gösterir. Ancak new_column_name, old_column_name dışındaki herhangi bir sütun adıyla aynı olamaz.
new_data_type
Evet
Sütun için yeni veri türü. -
Örnek
-- Change the data type of the id field in the sale_detail table from BIGINT to STRING. ALTER TABLE sale_detail CHANGE COLUMN id id STRING; -
Desteklenen veri türü dönüşümleri
NotY dönüşümün desteklendiğini gösterir. N dönüşümün desteklenmediğini gösterir. - dönüşümün uygulanamadığını gösterir. Y() parantez içindeki koşul karşılandığında dönüşümün desteklendiğini gösterir.

Sütun sırasını değiştirin
Mevcut bölümlenmemiş veya bölümlenmiş bir tablodaki sütun sırasını değiştirebilirsiniz. Kısıtlamalar hakkında daha fazla bilgi için bkz. Kullanım notları.
-
Ön koşullar
Şema evrimini etkinleştirmek için
setproject odps.schema.evolution.enable=true;komutunu çalıştırın.İzinler: Bu proje düzeyinde bir özelliktir. Bu komutu çalıştırmak için proje sahibi olmanız veya proje düzeyinde Super_Administrator ya da Admin rolüne sahip olmanız gerekir. Daha fazla bilgi için bkz. Bir kullanıcıya yerleşik yönetim rolü atayın.
Etkin olma süresi: Değişiklik yaklaşık 10 dakika içinde etkili olur.
-
Sözdizimi
ALTER TABLE <table_name> CHANGE <old_column_name> <new_column_name> <column_type> AFTER <column_name>; -
Parametreler
Parametre
Gerekli
Açıklama
table_name
Evet
Değiştirilecek tablonun adı.
old_column_name
Evet
Taşınacak sütunun adı.
new_col_name
EvetSütunun yeni adı.
new_col_name ile old_column_name aynı olabilir; bu durum sütun adının değiştirilmediğini gösterir. Ancak new_col_name, old_column_name dışındaki herhangi bir sütun adıyla aynı olamaz.
column_type
Evet
Sütunun orijinal veri türü. Bu değiştirilemez.
column_name
Evet
Yeniden sıralanacak sütunu column_name öğesinden sonra taşır. -
Örnekler
-- Change the name of the customer column in the sale_detail table to customer_id and move it after the total_price column. ALTER TABLE sale_detail CHANGE customer customer_id STRING AFTER total_price; -- Move the customer_id column in the sale_detail table after the total_price column without changing the column name. ALTER TABLE sale_detail CHANGE customer_id customer_id STRING AFTER total_price;
Sütun adını değiştirin
Mevcut bölümlenmemiş veya bölümlenmiş bir tablodaki bir sütunun adını değiştirebilirsiniz.
-
Sözdizimi
ALTER TABLE <table_name> CHANGE COLUMN <old_col_name> RENAME TO <new_col_name>; -
Parametreler
Parametre
Gerekli
Açıklama
table_name
Evet
Değiştirilecek tablonun adı.
old_col_name
Evet
Sütunun geçerli adı. Sütun mevcut olmalıdır.
new_col_name
Evet
Sütun için yeni ad. Sütun adı tablo içinde benzersiz olmalıdır. -
Örnek
-- Rename the customer_name column in the sale_detail table to customer. ALTER TABLE sale_detail CHANGE COLUMN customer_name RENAME TO customer;
Sütun açıklamasını değiştirin
Mevcut bölümlenmemiş veya bölümlenmiş bir tablodaki bir sütunun açıklamasını değiştirebilirsiniz.
-
Sözdizimi
ALTER TABLE <table_name> CHANGE COLUMN <col_name> COMMENT '<col_comment>'; -
Parametreler
Parametre
Gerekli
Açıklama
table_name
Evet
Değiştirilecek tablonun adı.
col_name
Evet
Açıklamasını değiştirmek istediğiniz sütunun adı. Sütun mevcut olmalıdır.
col_comment
Evet
Yeni açıklama. Geçerli bir dize olmalı ve maksimum uzunluğu 1.024 bayttır. -
Örnek
-- Change the comment of the customer column in the sale_detail0113 table. ALTER TABLE sale_detail0113 CHANGE COLUMN customer COMMENT 'customer';
Sütun adını ve açıklamasını değiştirin
Bölümlenmemiş veya bölümlenmiş bir tablodaki bir sütunun adını ve açıklamasını değiştirebilirsiniz.
-
Sözdizimi
ALTER TABLE <table_name> CHANGE COLUMN <old_col_name> <new_col_name> <column_type> COMMENT '<col_comment>'; -
Parametreler
Parametre
Gerekli
Açıklama
table_name
Evet
Değiştirilecek tablonun adı.
old_col_name
Evet
Değiştirilecek sütunun geçerli adı. Sütun mevcut olmalıdır.
new_col_name
Evet
Sütun için yeni ad. Sütun adı tablo içinde benzersiz olmalıdır.
column_type
Evet
Sütunun veri türü.
col_comment
İsteğe bağlı
Yeni açıklama. Maksimum uzunluk 1.024 bayttır. -
Örnek
-- Change the name of the customer column in the sale_detail table to customer_newname and change its comment to 'customer'. ALTER TABLE sale_detail CHANGE COLUMN customer customer_newname STRING COMMENT 'customer';
Bir sütunun NOT NULL özelliğini değiştirin
Bölüm anahtarı olmayan bir sütunun NOT NULL özelliğini değiştirebilirsiniz. Örneğin, bölüm anahtarı olmayan bir sütun NULL değerlere izin vermeyecek şekilde tanımlandıysa bu komutu kullanarak NULL değerlere izin verecek şekilde değiştirebilirsiniz.
Bu işlem geri alınamaz: NULL değerlere izin verdikten sonra bir sütunu tekrar NULL değerlere izin vermeyecek şekilde değiştiremezsiniz.
-
Nullableözelliğini görüntülemek ve sütunun NULL değerlere izin verip vermediğini belirlemek içinDESC EXTENDED table_name;komutunu çalıştırın:Nullabledeğeritrueise NULL değerlere izin verilir.Nullabledeğerifalseise NULL değerlere izin verilmez.
-
Sözdizimi
ALTER TABLE <table_name> CHANGE COLUMN <old_col_name> NULL; -
Parametreler
Parametre
Gerekli
Açıklama
table_name
Evet
Değiştirilecek tablonun adı.
old_col_name
Evet
Değiştirilecek bölüm anahtarı olmayan sütunun adı. Sütun mevcut olmalıdır. -
Örnek
-- Create a partitioned table in which the id column cannot be NULL. CREATE TABLE null_test(id INT NOT NULL, name STRING) PARTITIONED BY (ds string); -- View table properties. DESC EXTENDED null_test; -- The following result is returned: +------------------------------------------------------------------------------------+ | Native Columns: | +------------------------------------------------------------------------------------+ | Field | Type | Label | ExtendedLabel | Nullable | DefaultValue | Comment | +------------------------------------------------------------------------------------+ | id | int | | | false | NULL | | | name | string | | | true | NULL | | +------------------------------------------------------------------------------------+ | Partition Columns: | +------------------------------------------------------------------------------------+ | ds | string | | +------------------------------------------------------------------------------------+ -- Allow the id column to be NULL. ALTER TABLE null_test CHANGE COLUMN id NULL; -- View table properties. DESC EXTENDED null_test; -- The following result is returned: +------------------------------------------------------------------------------------+ | Native Columns: | +------------------------------------------------------------------------------------+ | Field | Type | Label | ExtendedLabel | Nullable | DefaultValue | Comment | +------------------------------------------------------------------------------------+ | id | int | | | true | NULL | | | name | string | | | true | NULL | | +------------------------------------------------------------------------------------+ | Partition Columns: | +------------------------------------------------------------------------------------+ | ds | string | | +------------------------------------------------------------------------------------+
Başvurular
Tablo işlemleri hakkında daha fazla bilgi için aşağıdaki konulara bakın: