OSS harici tablolar için bölümleri yükleyebilir, ekleyebilir, bunlara veri yazabilir ve bu bölümleri kaldırabilirsiniz. Ayrıca Keyless Partition özelliğini kullanarak bölüm anahtarı adını içermeyen bölüm yolları oluşturabilirsiniz.
Kullanım senaryoları
-
Bölümlendirilmiş bir OSS harici tablosu oluşturduğunuzda, bölüm verilerini de yüklemeniz gerekir.
OSS dizin yapısını otomatik olarak ayrıştırmak, bölümleri belirlemek ve bölüm meta verilerini OSS harici tablosuna eklemek için Bölümleri yükleme (MSCK) konusuna bakın.
Bölüm meta verilerini OSS harici tablosuna manuel olarak eklemek için Bölüm ekleme konusuna bakın.
Bir OSS harici tablosundaki bir bölüme veri yazmak için Bölümlere veri yazma konusuna bakın.
Bir OSS harici tablosundan bir veya daha fazla bölümü kaldırmak için Bölüm kaldırma konusuna bakın.
Bir OSS harici tablosu kullanarak bölüm anahtarını içermeyen bir OSS bölüm yoluna veri yazmak için Keyless Partition konusuna bakın.
Bir OSS harici tablosunun en büyük bölümünden veri getirmek için MAX_PT işlevini kullanma konusuna bakın.
Bölümleri yükleme (MSCK)
Senaryolar
Bölümlendirilmiş bir OSS harici tablosunun bölüm verilerinin yüklenmesi gerekir. MaxCompute, bölümleri keşfetmek için OSS dizin yapısını ayrıştırır ve bölüm meta verilerini harici tabloya ekler.
MSCK komutu, tüm geçmiş bölümleri yüklemek için tek seferlik işlemler için uygundur. MaxCompute, tablo oluşturma sırasında belirtilen bölüm dizinine göre bölümleri keşfeder ve ekler; böylece bölümleri tek tek eklemenize gerek kalmaz.
Zaten çok sayıda bölümü olan bir tabloya yalnızca birkaç yeni bölüm ekliyorsanız, MSCK komutunu sıkça çalıştırmak verimsizdir. Bu komut, tüm OSS dizinini tekrar tekrar tarar ve meta veri güncellemelerini tetikler, bu da performansı düşürür. Artımlı bölüm güncellemeleri için bunun yerine bölümleri manuel olarak eklemenizi öneririz.
Söz dizimi
MSCK REPAIR TABLE <mc_oss_extable_name>;
MSCK REPAIR TABLE <mc_oss_extable_name> ADD PARTITIONS [WITH PROPERTIES (key:VALUE, key:VALUE ...)];
Örnekler
Aşağıdaki örnekte bölümlendirilmiş bir CSV harici tablosu kullanılmaktadır. MSCK komutu diğer OSS harici tablo biçimleri için de aynı şekilde çalışır.
-
Bölüm verilerini hazırlayın
OSS konsolunda oturum açın.
Pakette bir
Demo2dizini oluşturun. Bu dizinde,directionbölüm sütununa göre alt dizinler (direction=N,direction=NE,direction=S,direction=SWvedirection=W) oluşturun ve ilgili veri dosyalarını (vehicle1.csv, vehicle2.csv, vehicle3.csv, vehicle4.csv ve vehicle5.csv) her bir alt dizine yükleyin. Daha fazla bilgi için Ek: Örnek verileri hazırlama konusuna bakın.
-
Bölümlendirilmiş bir OSS harici tablosu oluşturun
CREATE EXTERNAL TABLE IF NOT EXISTS mc_oss_csv_external2 ( vehicleId INT, recordId INT, patientId INT, calls INT, locationLatitude DOUBLE, locationLongitude DOUBLE, recordTime STRING ) PARTITIONED BY ( direction STRING ) STORED BY 'com.aliyun.odps.CsvStorageHandler' WITH SERDEPROPERTIES ( 'odps.properties.rolearn'='acs:ram::<uid>:role/aliyunodpsdefaultrole' ) LOCATION 'oss://oss-cn-<region>-internal.aliyuncs.com/<bucket>/Demo2/'; -
Bölümleri yükleyin
MSCK REPAIR TABLE mc_oss_csv_external2 ADD PARTITIONS; -
OSS harici tablosunu sorgulayın
SELECT * FROM mc_oss_csv_external2 WHERE direction='NE'; -- The following result is returned: +-----------+----------+-----------+-------+------------------+-------------------+------------+-----------+ | vehicleid | recordid | patientid | calls | locationlatitude | locationlongitude | recordtime | direction | +-----------+----------+-----------+-------+------------------+-------------------+------------+-----------+ | 1 | 2 | 13 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | NE | | 1 | 3 | 48 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | NE | | 1 | 9 | 4 | 1 | 46.81006 | -92.08174 | 9/15/2014 0:00 | NE | +-----------+----------+-----------+-------+------------------+-------------------+------------+-----------+
Bölüm ekleme
Senaryolar
Bölümlendirilmiş bir OSS harici tablosunun bölüm verilerinin yüklenmesi gerekir. Bölüm bilgilerini manuel olarak eklemek için ALTER TABLE ADD PARTITION komutunu kullanın.
Bu yöntem, geçmiş bölümler yüklendikten sonra düzenli aralıklarla yeni bölümler eklemek için idealdir. Bir bölüme veri yazmadan önce bölümü ekleyerek, harici tablonun yeni verileri ayrı bir meta veri yenileme adımına gerek kalmadan hemen okuyabilmesini sağlarsınız.
Söz dizimi
ALTER TABLE <mc_oss_extable_name>
ADD PARTITION (<col_name>=<col_value>)[
PARTITION (<col_name>=<col_value>)...][location URL];
col_name ve col_value değerleri, bölüm veri dosyalarını içeren dizinin adıyla eşleşmelidir. Bir ADD PARTITION yan tümcesi bir alt dizine karşılık gelir ve birden çok OSS alt dizini için birden çok ADD PARTITION yan tümcesi gerekir.
-
Örneğin, bölüm veri dosyalarının OSS dizin yapısında col_name
directiondeğerine, col_value ise N, NE, S, SW veya W değerlerine karşılık gelir.Demo2/ ├── direction=N/ ├── direction=NE/ ├── direction=S/ ├── direction=SW/ └── direction=W/
Örnekler
Aşağıdaki örnekte bölümlendirilmiş bir CSV harici tablosu kullanılmaktadır. Bölüm ekleme yöntemi diğer OSS harici tablo biçimleri için de aynıdır.
-
Bölüm verilerini hazırlayın
OSS konsolunda oturum açın.
Pakette bir
Demo2dizini oluşturun. Bu dizinde,directionbölüm sütununa göre alt dizinler (direction=N,direction=NE,direction=S,direction=SWvedirection=W) oluşturun ve ilgili veri dosyalarını (vehicle1.csv, vehicle2.csv, vehicle3.csv, vehicle4.csv ve vehicle5.csv) her bir alt dizine yükleyin. Daha fazla bilgi için Ek: Örnek verileri hazırlama konusuna bakın.
-
Bölümlendirilmiş bir OSS harici tablosu oluşturun
CREATE EXTERNAL TABLE IF NOT EXISTS mc_oss_csv_external3 ( vehicleId INT, recordId INT, patientId INT, calls INT, locationLatitude DOUBLE, locationLongitude DOUBLE, recordTime STRING ) PARTITIONED BY ( direction STRING ) STORED BY 'com.aliyun.odps.CsvStorageHandler' WITH SERDEPROPERTIES ( 'odps.properties.rolearn'='acs:ram::<uid>:role/aliyunodpsdefaultrole' ) LOCATION 'oss://oss-cn-<region>-internal.aliyuncs.com/<bucket>/Demo2/'; -
Bölümleri ekleyin
ALTER TABLE mc_oss_csv_external3 ADD PARTITION (direction='N') PARTITION (direction='NE') PARTITION (direction='S') PARTITION (direction='SW') PARTITION (direction='W'); -
OSS harici tablosunu sorgulayın
SELECT * FROM mc_oss_csv_external3 WHERE direction='NE'; -- The following result is returned: +-----------+----------+-----------+-------+------------------+-------------------+------------+-----------+ | vehicleid | recordid | patientid | calls | locationlatitude | locationlongitude | recordtime | direction | +-----------+----------+-----------+-------+------------------+-------------------+------------+-----------+ | 1 | 2 | 13 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | NE | | 1 | 3 | 48 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | NE | | 1 | 9 | 4 | 1 | 46.81006 | -92.08174 | 9/15/2014 0:00 | NE | +-----------+----------+-----------+-------+------------------+-------------------+------------+-----------+
Bölümlere veri yazma
Statik bölüm yazma
Senaryolar
Bir OSS harici tablosuna statik bölüm kullanarak veri yazmak için aşağıdaki söz dizimini kullanın. Daha fazla bilgi için INSERT INTO | INSERT OVERWRITE konusuna bakın.
Söz dizimi
INSERT {INTO|OVERWRITE} TABLE <mc_oss_extable_name>
PARTITION (<pt_spec>) [(<col_name> [,<col_name> ...)]]
<select_statement> FROM <from_statement>;
Örnekler
Aşağıdaki örnekte bölümlendirilmiş bir CSV harici tablosu kullanılmaktadır. Veri yazma yöntemi diğer OSS harici tablo biçimleri için de aynıdır.
-
Bölümlendirilmiş bir OSS harici tablosu oluşturun
CREATE EXTERNAL TABLE IF NOT EXISTS mc_oss_csv_external5 ( vehicleId INT, recordId INT, patientId INT, calls INT, locationLatitude DOUBLE, locationLongitude DOUBLE, recordTime STRING ) PARTITIONED BY ( direction STRING ) STORED BY 'com.aliyun.odps.CsvStorageHandler' WITH SERDEPROPERTIES ( 'odps.properties.rolearn'='acs:ram::<uid>:role/aliyunodpsdefaultrole' ) LOCATION 'oss://oss-cn-<region>-internal.aliyuncs.com/<bucket>/mc_oss_csv_external5'; -
Statik bir bölüme veri yazın
INSERT INTO mc_oss_csv_external5 PARTITION (direction='SW') VALUES (1, 14, 76, 1, 46.81006, -92.08174, '9/14/2014 0:10'); INSERT INTO mc_oss_csv_external5 PARTITION (direction='S') VALUES (1, 89, 76, 1, 46.81006, -92.08174, '9/14/2014 0:10'); -
Sonucu doğrulayın
SET odps.sql.allow.fullscan=true; SELECT * FROM mc_oss_csv_external5; -- The following result is returned: +-----------+----------+-----------+-------+------------------+-------------------+------------+-----------+ | vehicleid | recordid | patientid | calls | locationlatitude | locationlongitude | recordtime | direction | +-----------+----------+-----------+-------+------------------+-------------------+------------+-----------+ | 1 | 89 | 76 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:10 | S | | 1 | 14 | 76 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:10 | SW | +-----------+----------+-----------+-------+------------------+-------------------+------------+-----------+
Dinamik bölüm yazma
Senaryolar
Bir OSS harici tablosuna dinamik bölüm kullanarak veri yazmak için aşağıdaki söz dizimini kullanın. Daha fazla bilgi için Dinamik bölümlere veri ekleme veya üzerine yazma (DYNAMIC PARTITION) konusuna bakın.
Söz dizimi
INSERT {INTO|OVERWRITE} TABLE <table_name> PARTITION (<ptcol_name>[, <ptcol_name> ...])
<select_statement> FROM <from_statement>;
Örnekler
Aşağıdaki örnekte bölümlendirilmiş bir CSV harici tablosu kullanılmaktadır. Veri yazma yöntemi diğer OSS harici tablo biçimleri için de aynıdır.
-
Test tablosu hazırlayın
CREATE TABLE IF NOT EXISTS vehicle_test ( vehicleid INT, recordid INT, patientid INT, calls INT, locationlatitude DOUBLE, locationlongitude DOUBLE, recordtime STRING, direction STRING ); INSERT INTO vehicle_test VALUES (1, 1, 51, 1, 46.81006, -92.08174, '9/14/2014 0:00', 'S'); INSERT INTO vehicle_test VALUES (1, 2, 13, 1, 46.81006, -92.08174, '9/14/2014 0:00', 'NE'); INSERT INTO vehicle_test VALUES (1, 3, 48, 1, 46.81006, -92.08174, '9/14/2014 0:00', 'NE'); INSERT INTO vehicle_test VALUES (1, 4, 30, 1, 46.81006, -92.08174, '9/14/2014 0:00', 'W'); INSERT INTO vehicle_test VALUES (1, 5, 47, 1, 46.81006, -92.08174, '9/14/2014 0:00', 'S'); -
Bölümlendirilmiş bir OSS harici tablosu oluşturun
CREATE EXTERNAL TABLE IF NOT EXISTS mc_oss_csv_external6 ( vehicleId INT, recordId INT, patientId INT, calls INT, locationLatitude DOUBLE, locationLongitude DOUBLE, recordTime STRING ) PARTITIONED BY ( direction STRING ) STORED BY 'com.aliyun.odps.CsvStorageHandler' WITH SERDEPROPERTIES ( 'odps.properties.rolearn'='acs:ram::<uid>:role/aliyunodpsdefaultrole' ) LOCATION 'oss://oss-cn-<region>-internal.aliyuncs.com/<bucket>/mc_oss_csv_external6'; -
Dinamik bölümler kullanarak veri yazın
INSERT INTO mc_oss_csv_external6 PARTITION(direction) SELECT * FROM vehicle_test; -
Sonucu doğrulayın
SET odps.sql.allow.fullscan=true; SELECT * FROM mc_oss_csv_external6; -- The following result is returned: +-----------+----------+-----------+-------+------------------+-------------------+------------+-----------+ | vehicleid | recordid | patientid | calls | locationlatitude | locationlongitude | recordtime | direction | +-----------+----------+-----------+-------+------------------+-------------------+------------+-----------+ | 1 | 4 | 30 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | W | | 1 | 2 | 13 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | NE | | 1 | 3 | 48 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | NE | | 1 | 1 | 51 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | S | | 1 | 5 | 47 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | S | +-----------+----------+-----------+-------+------------------+-------------------+------------+-----------+
Bölüm kaldırma
Senaryolar
Bölümlendirilmiş bir OSS harici tablosundan bir veya daha fazla bölümü kaldırın. Daha fazla bilgi için Bölüm işlemleri konusuna bakın.
Söz dizimi
ALTER TABLE <mc_oss_extable_name> DROP [IF EXISTS] PARTITION <pt_spec>[, PARTITION <pt_spec>...];
Örnekler
-
Bölüm ekleme örneğindeki örnek mc_oss_csv_external3 tablosunun bölüm listesini görüntüleyin.
SHOW PARTITIONS mc_oss_csv_external3; -- The following result is returned: direction=N direction=NE direction=S direction=SW direction=W OK -
direction=S ve direction=SW bölümlerini kaldırın.
ALTER TABLE mc_oss_csv_external3 DROP IF EXISTS PARTITION (direction = 'S'), PARTITION (direction = 'SW'); -
direction=S ve direction=SW bölümlerinin kaldırıldığını onaylamak için bölüm listesini tekrar görüntüleyin.
SHOW PARTITIONS mc_oss_csv_external3; -- The following result is returned: direction=N direction=NE direction=W OK
Keyless Partition
Senaryolar
Bölümlendirilmiş bir OSS harici tablosuna veri yazdığınızda, oluşturulan OSS bölüm dizini bölüm anahtarını ve değerini içerir (örneğin, dt=20250724). Bölüm anahtarını içermeyen bir OSS bölüm yoluna yazmak için Keyless Partition özelliğini kullanın.
Sınırlamalar
Dinamik bölümler kullanarak harici bir tabloya veri yazarken sabit bir değer belirtirseniz, Keyless Partition parametresinin etkisi olmaz. <pt_col_name>=<pt_col_value> biçiminde bir OSS dizini oluşturulur ve bu dizinden verileri okuyamazsınız. Örneğin, INSERT OVERWRITE ext_tb PARTITION(dt) VALUES(1, 'xxx','20250724'), (2, 'xxx','20250724')
Bu özellik Paimon, Hudi ve Delta Lake harici tabloları için desteklenmez.
Söz dizimi
Bir harici tablo oluştururken, aşağıdaki CSV harici tablosu örneğinde gösterildiği gibi TBLPROPERTIES parametresini ekleyin.
CREATE EXTERNAL TABLE [IF NOT EXISTS] <mc_oss_extable_name>
(
<col_name> <data_type>,
...
)
[COMMENT <table_comment>]
[PARTITIONED BY (<col_name> <data_type>, ...)]
STORED BY 'com.aliyun.odps.CsvStorageHandler'
[WITH serdeproperties (
['<property_name>'='<property_value>',...]
)]
LOCATION '<oss_location>'
TBLPROPERTIES('odps.external.output.partition.keys.omitted' = 'true'); -- When this parameter is true, the output OSS partition directory does not include the partition key.
Örnekler
Bu bölümde örnek olarak bölümlendirilmiş bir CSV harici tablosu kullanılmıştır. Yöntem diğer biçimler için de aynıdır.
-
Bölümlendirilmiş bir CSV harici tablosu oluşturun
CREATE EXTERNAL TABLE ext_csv_test03 ( id INT, name STRING ) PARTITIONED BY (dt STRING) STORED BY 'com.aliyun.odps.CsvStorageHandler' LOCATION 'oss://oss-cn-<region>-internal.aliyuncs.com/<bucket>/keyless_partition/ext_csv_test03/' TBLPROPERTIES('odps.external.output.partition.keys.omitted' = 'true'); -
Statik bir bölüme sabit veri yazın
INSERT INTO ext_csv_test03 PARTITION (dt='20250724') VALUES (1, 'aaa'), (2, 'bbb'), (3, 'ccc'); SELECT * FROM ext_csv_test03; -- The following result is returned: +------+------+----------+ | id | name | dt | +------+------+----------+ | 1 | aaa | 20250724 | | 2 | bbb | 20250724 | | 3 | ccc | 20250724 | +------+------+----------+OSS tarafından oluşturulan dizin aşağıdaki gibidir: 20250724 dizini dt= bölüm anahtarını içermez.
ext_csv_test03/ └── 20250724/ -
Verileri tek bir dinamik bölüm değeri kullanarak yazın
Resmi olarak bu bir dinamik bölüm yazma işlemidir, ancak
valuesyan tümcesindeki bölüm sütunu yalnızca bir farklı değere ('xxx') sahip olduğundan, MaxCompute bunu kısmen statik ve kısmen dinamik bölüm yazma işlemi olarak değerlendirir.INSERT OVERWRITE ext_csv_test03 PARTITION(dt) VALUES (1, 'xxx','20250724'), (2, 'xxx','20250724'); SELECT * FROM ext_csv_test03; -- The following result is returned: -- Because the generated OSS partition directory is in an unexpected format, the newly inserted data cannot be queried. Only the data from the static write in Step 2 is returned. +------+------+----------+ | id | name | dt | +------+------+----------+ | 1 | aaa | 20250724 | | 2 | bbb | 20250724 | | 3 | ccc | 20250724 | +------+------+----------+OSS tarafından oluşturulan dizinde görüldüğü üzere, oluşturulan
dt=20250724dizinidtbölüm anahtarını içerir, bu nedenle bu senaryoda kullanılan söz dizimi hatalıdır.ext_csv_test03/ ├── 20250724/ └── dt=20250724/ -
Dinamik bölümler kullanarak sabit veri yazın
INSERT OVERWRITE ext_csv_test03 PARTITION(dt) VALUES (1, 'xxx','20250725'), (2, 'yyy','20250726'); SELECT * FROM ext_csv_test03; -- The following result is returned: +------+------+----------+ | id | name | dt | +------+------+----------+ | 2 | yyy | 20250726 | | 1 | xxx | 20250725 | | 1 | aaa | 20250724 | | 2 | bbb | 20250724 | | 3 | ccc | 20250724 | +------+------+----------+OSS tarafından oluşturulan dizinler aşağıdaki gibidir. Oluşturulan 20250725 ve 20250726 dizinleri dt= bölüm anahtarını içermez.
ext_csv_test03/ ├── 20250724/ ├── 20250725/ └── 20250726/ -
Verileri dinamik bölümler kullanarak bir SELECT yan tümcesinden yazın.
-
Bir test tablosu hazırlayın.
CREATE TABLE table03 (id INT, name STRING, dt STRING); INSERT INTO table03 VALUES (6, 'fff', '20250725'), (7, 'ggg', '20250725'), (8, 'hhh', '20250723'); -
SELECT yan tümcesi aracılığıyla test tablosundan veri yazın
INSERT OVERWRITE ext_csv_test03 PARTITION(dt) SELECT * FROM table03; SELECT * FROM ext_csv_test03; -- The following result is returned: +------+------+----------+ | id | name | dt | +------+------+----------+ | 2 | yyy | 20250726 | | 8 | hhh | 20250723 | | 6 | fff | 20250725 | | 7 | ggg | 20250725 | | 1 | aaa | 20250724 | | 2 | bbb | 20250724 | | 3 | ccc | 20250724 | +------+------+----------+OSS tarafından oluşturulan dizinlerden görüldüğü üzere, 20250723 ve 20250725 dizinleri dt= bölüm anahtarını içermez.
ext_csv_test03/ ├── 20250723/ ├── 20250724/ ├── 20250725/ └── 20250726/
-
MAX_PT işlevini kullanma
Senaryolar
MAX_PT işlevi, bir OSS harici tablosunda veri içeren en büyük bölümden veri sorgular. Daha fazla bilgi için MAX_PT konusuna bakın.
Dikkat edilmesi gerekenler
Bir OSS harici tablosunda çok düzeyli bölümler varsa, MAX_PT yalnızca veri içeren birinci düzey bölümler arasındaki en büyük bölüm değerini döndürür ve bu bölüm SHOW PARTITIONS kullanılarak listelenebilir.
OSS dizininde dosya içeren herhangi bir bölüm bulunamazsa, MAX_PT işlevi bir hata döndürür.
MAX_PT işlevinin bölümlendirilmemiş bir tabloda çalıştırılması hataya neden olur.
Söz dizimi
SELECT * FROM <mc_oss_extable_name>
WHERE <pt_col_name> = MAX_PT("<mc_oss_extable_name>");
-- You can also use the following syntax.
SELECT * FROM <mc_oss_extable_name>
WHERE <pt_col_name> = (SELECT MAX(<pt_col_name>) FROM <mc_oss_extable_name>);
Örnekler
Aşağıdaki örnekte bölümlendirilmiş bir CSV harici tablosu kullanılmaktadır. MAX_PT işlevi diğer OSS harici tablo biçimleri için de aynı şekilde çalışır.
-
Bölümlendirilmiş bir OSS harici tablosu oluşturun ve buna veri yazın
CREATE EXTERNAL TABLE IF NOT EXISTS mc_oss_csv_external9 ( vehicleId INT, recordId INT, patientId INT, calls INT, locationLatitude DOUBLE, locationLongitude DOUBLE, recordTime STRING, direction STRING ) PARTITIONED BY ( y STRING, m STRING ) STORED BY 'com.aliyun.odps.CsvStorageHandler' WITH SERDEPROPERTIES ( 'odps.properties.rolearn'='acs:ram::<uid>:role/aliyunodpsdefaultrole' ) LOCATION 'oss://oss-cn-<region>-internal.aliyuncs.com/<bucket>/mc_oss_csv_external9'; INSERT INTO mc_oss_csv_external9 PARTITION(y='2023', m='03') VALUES (1, 89, 76, 1, 46.81606, -92.08174, '9/14/2014 0:10', 'SW'); INSERT INTO mc_oss_csv_external9 PARTITION(y='2023', m='02') VALUES (1, 14, 76, 1, 47.90836, -92.08174, '9/14/2014 0:10', 'W'); INSERT INTO mc_oss_csv_external9 PARTITION(y='2022', m='03') VALUES (1, 56, 76, 1, 48.81748, -92.08174, '9/14/2014 0:10', 'S'); INSERT INTO mc_oss_csv_external9 PARTITION(y='2022', m='02') VALUES (1, 78, 76, 1, 49.81678, -92.08174, '9/14/2014 0:10', 'SE'); -
OSS bölüm dizini
mc_oss_csv_external9/ ├── y=2022/ ├── m=02/ └── d.csv └── m=03/ └── c.csv └── y=2023/ ├── m=02/ └── b.csv └── m=03/ └── a.csv -
Çok düzeyli bölümlendirilmiş bir OSS harici tablosu için, hangi dizinin boş olduğuna bağlı olarak MAX_PT'nin dönüş değeri aşağıdaki gibi değişir.
-
Tüm OSS bölüm dizinleri boş olmadığında, MAX_PT işlevi birinci düzey bölüm olan 2023 değerini döndürür.
-- Query the maximum partition of the external table. SELECT MAX_PT("mc_oss_csv_external9"); -- The following result is returned: +-----+ | _c0 | +-----+ | 2023 | +-----+ -
OSS bölüm dizinindeki üst düzey dizin kısmı boş olduğunda, MAX_PT işlevi birinci düzey bölüm olan 2023 değerini döndürür.
mc_oss_csv_external9/ ├── y=2022/ ├── m=02/ └── d.csv └── m=03/ └── c.csv └── y=2023/ ├── m=02/ └── b.csv └── m=03/ -- Empty-- Query the maximum partition of the external table. SELECT MAX_PT("mc_oss_csv_external9"); -- The following result is returned: +-----+ | _c0 | +-----+ | 2023 | +-----+ -
Bir OSS bölüm dizinindeki en büyük birinci düzey dizin tamamen boş olduğunda, MAX_PT işlevi birinci düzey bölüm olan 2022 değerini döndürür.
mc_oss_csv_external9/ ├── y=2022/ ├── m=02/ └── d.csv └── m=03/ └── c.csv └── y=2023/ ├── m=02/ -- Empty └── m=03/ -- Empty-- Query the maximum partition of the external table. SELECT MAX_PT("mc_oss_csv_external9"); -- The following result is returned: +-----+ | _c0 | +-----+ | 2022 | +-----+ -
Bölüm dizinindeki tüm dizinler tamamen boş olduğunda, MAX_PT işlevi hata verir.
SELECT MAX_PT("mc_oss_csv_external9"); -- The following error is returned: FAILED: ODPS-0130071:[1,8] Semantic analysis exception - encounter runtime exception while evaluating function MAX_PT, detailed message: table "project.default.mc_oss_csv_external9" has no partitions or none of the partitions have any data
-