Tüm Ürünler
Search
Belge Merkezi

MaxCompute:OSS harici tablolar için bölüm işlemleri

Son Güncelleme:Oct 10, 2026

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.

  1. Bölüm verilerini hazırlayın

    1. OSS konsolunda oturum açın.

    2. Pakette bir Demo2 dizini oluşturun. Bu dizinde, direction bölüm sütununa göre alt dizinler (direction=N, direction=NE, direction=S, direction=SW ve direction=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.

  2. 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/';
  3. Bölümleri yükleyin

    MSCK REPAIR TABLE mc_oss_csv_external2 ADD PARTITIONS;
  4. 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 direction değ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.

  1. Bölüm verilerini hazırlayın

    1. OSS konsolunda oturum açın.

    2. Pakette bir Demo2 dizini oluşturun. Bu dizinde, direction bölüm sütununa göre alt dizinler (direction=N, direction=NE, direction=S, direction=SW ve direction=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.

  2. 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/';
  3. 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');
  4. 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.

  1. 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';
  2. 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');
  3. 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.

  1. 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');
  2. 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';
  3. Dinamik bölümler kullanarak veri yazın

    INSERT INTO mc_oss_csv_external6 PARTITION(direction) SELECT * FROM vehicle_test;
  4. 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

  1. 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
  2. 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');
  3. 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.

  1. 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');
  2. 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/
  3. Verileri tek bir dinamik bölüm değeri kullanarak yazın

    Resmi olarak bu bir dinamik bölüm yazma işlemidir, ancak values yan 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=20250724 dizini dt bölüm anahtarını içerir, bu nedenle bu senaryoda kullanılan söz dizimi hatalıdır.

    ext_csv_test03/
    ├── 20250724/
    └── dt=20250724/
  4. 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/
  5. Verileri dinamik bölümler kullanarak bir SELECT yan tümcesinden yazın.

    1. 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');
    2. 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.

  1. 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');
  2. 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
  3. Ç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.

    1. 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 |
      +-----+
    2. 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 |
      +-----+
    3. 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 |
      +-----+
    4. 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