Bu konu, Object Storage Service (OSS) üzerinde RCFile harici tabloların nasıl oluşturulacağını, bu tablolardan veri okunacağını ve bu tablolara veri yazılacağını açıklar.
Kullanım notları
OSS harici tablolar küme özelliğini desteklemez.
Tek bir dosyanın boyutu 2 GB'ı aşamaz. 2 GB'tan büyük dosyaları bölmeniz gerekir.
MaxCompute ve OSS aynı bölgede bulunmalıdır.
Desteklenen veri türleri
MaxCompute veri türleri hakkında daha fazla bilgi için bkz. Veri türleri (Sürüm 1,0) ve Veri türleri (Sürüm 2,0).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Harici tablo oluşturma
Sözdizimi
CREATE EXTERNAL TABLE [IF NOT EXISTS] mc_oss_rcfile_extable
(
<col_name> <data_type>,
...
)
[COMMENT <table_comment>]
[PARTITIONED BY (<col_name> <data_type>, ...)]
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.columnar.LazyBinaryColumnarSerDe'
STORED AS rcfile
LOCATION 'oss_location';
Parametreler
Daha fazla bilgi için bkz. Temel sözdizimi parametreleri.
Veri yazma
MaxCompute'den OSS'ye veri yazma sözdizimi hakkında daha fazla bilgi için bkz. OSS harici tablolar.
Sorgulama ve analiz
SELECT sözdizimi hakkında daha fazla bilgi için bkz. OSS harici tablolar.
Sorgu planlarını optimize etme hakkında daha fazla bilgi için bkz. OSS harici tablolar.
Örnek
Bu örnekte, yerleşik açık kaynaklı veri ayrıştırıcısını kullanarak bir RCFile harici tablonun nasıl oluşturulacağı, OSS'ye veri nasıl yazılacağı ve verilerin nasıl sorgulanacağı gösterilmektedir.
-
Önkoşullar
-
Bir OSS paketi ve klasörünüz bulunmaktadır. Daha fazla bilgi için bkz. Paket oluşturun ve Klasörleri yönetin.
MaxCompute, OSS'de otomatik klasör oluşturmayı destekler. Bir SQL deyimi harici tabloları ve kullanıcı tanımlı işlevleri (UDF) içeriyorsa tek bir deyimle tablolardan okuma ve tablolara yazma işlemlerini gerçekleştirebilir ve UDF'leri kullanabilirsiniz. Klasörleri manuel olarak da oluşturabilirsiniz.
MaxCompute yalnızca belirli bölgelerde dağıtılır. Bölgeler arası veri bağlantılarıyla ilgili potansiyel sorunları önlemek için OSS paketinizin MaxCompute projenizle aynı bölgede olduğundan emin olun.
-
Yetkilendirme
OSS'ye erişim iznine sahip olmanız gerekir. OSS harici tablolarına erişmek için bir Alibaba Cloud hesabı, Resource Access Management (RAM) kullanıcısı veya RAM rolü kullanabilirsiniz. Yetkilendirme hakkında daha fazla bilgi için bkz. OSS için STS modunda erişimi yetkilendirin.
MaxCompute projesinde CreateTable iznine sahip olmanız gerekir. Tablo izinleri hakkında daha fazla bilgi için bkz. MaxCompute izinleri.
-
Test verilerini yükleyin
OSS konsolu üzerinde oturum açın ve RCFile veri dosyasını OSS paketindeki
oss-mc-test/Rcfile/dt=20241223/klasörüne yükleyin. Daha fazla bilgi için bkz. Dosyaları OSS'ye yükleyin. -
Bir RCFile harici tablo oluşturun
CREATE EXTERNAL TABLE mc_oss_rcfile_extable ( vehicleId STRING , recordId STRING, patientId STRING, calls STRING, locationLatitute STRING, locationLongtitue STRING, recordTime STRING, direction STRING ) PARTITIONED BY (dt STRING) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.columnar.LazyBinaryColumnarSerDe' STORED AS rcfile LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/oss-mc-test/Rcfile/'; -
Bölüm verilerini içe aktarın. OSS harici tablo bölümlemeyi destekleyen bir tabloy ise bölüm verilerini de içe aktarmanız gerekir. Daha fazla bilgi için bkz. OSS harici tabloya bölüm verisi ekleme sözdizimi.
-- Import partition data. MSCK REPAIR TABLE mc_oss_rcfile_extable ADD PARTITIONS; -
RCFile harici tabloyu sorgulayın.
SELECT * FROM mc_oss_rcfile_extable2_pt WHERE dt=20241223; -- The following result is returned: +------------+------------+------------+------------+------------------+-------------------+------------------+------------+------------+ | vehicleid | recordid | patientid | calls | locationlatitute | locationlongtitue | recordtime | direction | dt | +------------+------------+------------+------------+------------------+-------------------+------------------+------------+------------+ | 1 | 1 | 7 | 1 | 39.995353 | 116.410101 | 2025/12/23 10:01 | NW | 20241223 | | 1 | 2 | 15 | 1 | 39.996123 | 116.412345 | 2025/12/24 10:01 | NE | 20241223 | | 2 | 3 | 22 | 2 | 40.001234 | 116.425678 | 2025/12/25 10:01 | SE | 20241223 | | 1 | 4 | 71 | 1 | 39.998888 | 106.419999 | 2025/12/26 10:01 | NW | 20241223 | | 3 | 5 | 50 | 1 | 29.989999 | 116.401111 | 2025/12/27 10:01 | NE | 20241223 | | 2 | 6 | 28 | 3 | 40.003456 | 110.42891 | 2025/12/28 10:01 | NW | 20241223 | | 4 | 7 | 20 | 2 | 39.991234 | 116.435555 | 2025/12/29 10:01 | NE | 20241223 | | 1 | 8 | 13 | 1 | 39.994567 | 116.41789 | 2025/12/30 10:01 | SE | 20241223 | +------------+------------+------------+------------+------------------+-------------------+------------------+------------+------------+ -
RCFile harici tabloya veri yazın.
INSERT INTO TABLE mc_oss_rcfile_extable2_pt PARTITION (dt=20251223) VALUES ('1','13','76','1','46.81006','-92.08174','9/14/2014 0:10','SW'); -
Verilerin başarıyla yazılıp yazılmadığını kontrol edin.
SELECT * FROM mc_oss_rcfile_extable2_pt WHERE dt=20250521 AND recordId='13'; -- The following result is returned: +------------+------------+------------+------------+------------------+-------------------+----------------+------------+------------+ | vehicleid | recordid | patientid | calls | locationlatitute | locationlongtitue | recordtime | direction | dt | +------------+------------+------------+------------+------------------+-------------------+----------------+------------+------------+ | 1 | 13 | 76 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:10 | SW | 20251223 | +------------+------------+------------+------------+------------------+-------------------+----------------+------------+------------+