MaxCompute, Object Storage Service (OSS) içinde depolanan bir Paimon tablo dizinine eşlenen ve bu verilere erişmenizi sağlayan bir Paimon harici tablo oluşturmanıza olanak tanır. Bu konuda, Paimon harici tablonun nasıl oluşturulacağı ve MaxCompute ile nasıl erişileceği açıklanmaktadır.
Genel Bakış
Apache Paimon hem akış hem de toplu işleme için yüksek aktarım hızında yazma ve düşük gecikme süresinde sorgulama özellikleri sunan bir veri gölü depolama formatıdır. Spark, Hive ve Trino gibi yaygın hesaplama motorlarıyla tam entegre olmasının yanı sıra Realtime Compute for Apache Flink ve E-MapReduce ile de entegredir. Apache Paimon kullanarak OSS üzerinde hızlıca bir veri gölü oluşturabilir ve bunu MaxCompute'a bağlayarak veri gölü analitiği yapabilirsiniz. Meta veri filtreleme özelliği, okuma işlerinde gereksiz OSS dizin dosyalarını atlayarak sorgu performansını daha da artırır.
Sınırlamalar
-
Şema sınırlamaları
Paimon harici tablolar, temel alınan Paimon dosyalarındaki şema değişikliklerini yansıtacak şekilde şemalarını otomatik olarak güncellemez.
-
Tablo özelliği sınırlamaları
Paimon harici tabloda küme özellikleri ayarlayamazsınız.
Birincil anahtar ayarlayamazsınız.
Paimon harici tablolar, Paimon tablo özelliklerinin doğrudan iletilmesini desteklemez.
-
Veri yazma, güncelleme ve sorgulama işlemleri
Paimon harici tabloya veri yazmak için
INSERT INTOveyaINSERT OVERWRITEifadelerini kullanabilirsiniz.Dinamik parça (bucket) tablolarına ve çapraz bölüm (cross-partition) tablolarına veri yazılması desteklenmez.
Paimon harici tablolar üzerinde
UPDATEveDELETEişlemleri desteklenmez.Paimon harici tablolar için geçmiş veri sürümlerine erişen zaman yolculuğu (time-travel) sorguları desteklenmez.
Paimon harici tablolara doğrudan veri yazmayın. Bunun yerine, UNLOAD gibi yöntemler kullanarak verileri OSS'e dışa aktarın.
MaxCompute ve OSS aynı bölgede bulunmalıdır.
Daha fazla bilgi için bkz. Desteklenen veri türleri.
İzin açıklaması
OSS harici tablolarına erişirken, Alibaba Cloud hesabı, RAM kullanıcı veya RAM rolü kullanmanızdan bağımsız olarak verilere
odps.properties.rolearnparametresinde belirtilen rol aracılığıyla erişilir. Bu nedenle, bir RAM rolü oluşturmalı ve bu role hedef OSS paket erişim izinlerini vermelisiniz; ardından rolün ARN değeriniodps.properties.rolearnparametresinde yapılandırmalısınız. Daha fazla bilgi için bkz. Parametreler.İş gereksinimlerinize göre aynı hesap veya farklı hesaplar arası erişimi yetkilendirebilirsiniz. Daha ayrıntılı erişim denetimi için özel bir yetkilendirme ilkesi kullanmanızı öneririz. Daha fazla bilgi için bkz. Harici veri kaynakları için yetkilendirme.
Paimon harici tablo oluşturma
Sözdizimi
Farklı formatlarda harici tablo oluşturma sözdizimi hakkında ayrıntılı bilgi için bkz. OSS harici tabloları.
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 'org.apache.paimon.hive.PaimonStorageHandler'
WITH serdeproperties (
'odps.properties.rolearn'='acs:ram::<uid>:role/<role_name>'
)
LOCATION '<oss_location>';
Ortak parametreler
Ortak parametreler hakkında daha fazla bilgi için bkz. Temel sözdizimi parametreleri.
Veri yazma
MaxCompute'daki yazma sözdizimi hakkında ayrıntılı bilgi için bkz. Yazma sözdizimi.
Veri sorgulama ve analiz etme
Paimon tabloları için veri parçalama (split) mantığı, yerel MaxCompute tablolarından farklıdır. Paimon formatı, dosya organizasyonu ve parçalama için kendi dahili mekanizmalarına sahiptir ve bu mekanizmalar MaxCompute parametreleriyle tam olarak uyumlu değildir.
SELECT sözdizimi için bkz. Sorgu sözdizimi.
Sorgu planlarını optimize etmek için bkz. Sorgu optimizasyonu.
Hatalı satır atlama (bad row skipping) hakkında daha fazla bilgi için bkz. BadRowSkipping.
Örnek
Adım 1: Ön koşullar
-
Bir OSS paketi ve dizini hazırladınız. Daha fazla bilgi için bkz. Paket oluşturma ve Dizin yönetimi.
Paketinizin MaxCompute projenizle aynı bölgede olduğundan emin olun.
-
İzinleri verin.
OSS'e erişim iznine sahipsiniz. Bir OSS harici tablosuna Alibaba Cloud hesabı, RAM kullanıcı veya RAM rolü kullanarak erişebilirsiniz. İzin verme hakkında daha fazla bilgi için bkz. OSS için STS modu yetkilendirme.
MaxCompute projesinde CreateTable iznine sahipsiniz. Tablo ile ilgili izinler hakkında daha fazla bilgi için bkz. MaxCompute izinleri.
Adım 2: Flink'te veriyi hazırlama
Bir Paimon katalog ve Paimon tablosu oluşturun, ardından tabloya veri ekleyin.
OSS'te zaten Paimon tablo veriniz varsa bu adımı atlayabilirsiniz.
-
Bir Paimon dosya sistemi kataloğu oluşturma
real-time compute for Apache Flink konsolu adresine giderek oturum açın ve sol üst köşeden bir bölge seçin.
Hedef çalışma alanının adına tıklayın ve ardından sol gezinme bölmesinde Data Management seçeneğini belirleyin.
-
catalog list sayfasında Create Catalog öğesine tıklayın. Create Catalog iletişim kutusunda Apache Paimon seçeneğini belirleyin, Next seçeneğine tıklayın ve aşağıdaki parametreleri yapılandırın:
Parameter
Required
Description
metastore
Yes
Meta depo türü. Bu örnektefilesystemseçeneğini belirleyin.
catalog name
Yes
Özel bir katalog adı, örneğinpaimon-catalog.
warehouse
Yes
OSS'teki depo dizini. Bu örnekte dizinoss://paimon-fs/paimon-test/şeklindedir.
fs.oss.endpoint
Yes
OSS hizmetinin uç noktası. Örneğin, China (Hangzhou) bölgesi için uç noktaoss-cn-hangzhou-internal.aliyuncs.comşeklindedir.
fs.oss.accessKeyId
Yes
OSS'e erişmek için kullanılan AccessKey ID.
fs.oss.accessKeySecret
Yes
OSS'e erişmek için kullanılan AccessKey secret.
-
Bir Paimon tablosu oluşturma
real-time compute for Apache Flink konsolu adresine giderek oturum açın ve sol üst köşeden bir bölge seçin.
Hedef çalışma alanı adına tıklayın ve ardından sol gezinme bölmesinde seçeneğini belirleyin.
-
Query Script sekmesinde yeni bir sorgu betiği oluşturmak için
simgesine
tıklayın.Aşağıdaki komutları girin ve çalıştırın:
CREATE TABLE `paimon_catalog`.`default`.test_tbl ( id BIGINT, data STRING, dt STRING, PRIMARY KEY (dt, id) NOT ENFORCED ) PARTITIONED BY (dt); INSERT INTO `paimon-catalog`.`default`.test_tbl VALUES (1,'CCC','2024-07-18'), (2,'DDD','2024-07-18');
-
INSERT INTO ... VALUES ...ifadesini çalıştıranlar gibi otomatik olarak tamamlanan SQL işleri için aşağıdaki işlemleri gerçekleştirin:Hedef çalışma alanının adına tıklayın. Sol gezinme bölmesinde seçeneğini belirleyin.
Deployments sayfasında hedef işe tıklayarak deployment details sayfasını açın.
-
Parameters bölümünde Edit seçeneğine tıklayın. Ardından, Other Configuration bölümünde
execution.checkpointing.checkpoints-after-tasks-finish.enabled: truedeğerini ayarlayın ve değişikliklerinizi kaydedin.Bir iş için çalışma zamanı parametrelerini yapılandırma hakkında daha fazla bilgi için bkz. İş dağıtım bilgilerini yapılandırma.
Adım 3: Paimon harici tablo oluşturma
Paimon harici tablo oluşturmak için MaxCompute'ta aşağıdaki SQL ifadesini çalıştırın:
CREATE EXTERNAL TABLE oss_extable_paimon_pt
(
id BIGINT,
data STRING
)
PARTITIONED BY (dt STRING )
STORED BY 'org.apache.paimon.hive.PaimonStorageHandler'
WITH serdeproperties (
'odps.properties.rolearn'='acs:ram::<uid>:role/<role_name>'
)
LOCATION 'oss://oss-cn-<your region>-internal.aliyuncs.com/<table_path>'
;
Yukarıdaki ifadede table_path, Flink'te oluşturduğunuz Paimon tablosunun yoludur; örneğin paimon-fs/paimon-test/default.db/test_tbl. Bu yolu bulmak için aşağıdaki adımları uygulayın:
real-time compute for Apache Flink konsolu adresine giderek oturum açın ve sol üst köşeden bir bölge seçin.
Hedef çalışma alanının adına tıklayın ve ardından sol gezinme bölmesinde Data Management seçeneğini belirleyin.
Catalogs sayfasında hedef katalog altında default seçeneğine tıklayın. Varsayılan sayfada hedef tabloyu bulun ve Actions sütunundaki View seçeneğine tıklayın.
Table Schema sekmesinde, Properties bölümündeki path parametresinin değerini kopyalayın. table_path için
oss://ön eki olmadan yolu girin.
Adım 4: Bölüm verilerini yükleme
Oluşturduğunuz OSS harici tablosu bölümlenmiş bir tabloy ise bölümlerini yüklemeniz gerekir. Daha fazla bilgi için bkz. OSS harici tabloları.
MSCK REPAIR TABLE oss_extable_paimon_pt ADD PARTITIONS;
Adım 5: Paimon harici tabloyu sorgulama
oss_extable_paimon_pt Paimon harici tablosunu sorgulamak için MaxCompute'ta aşağıdaki komutları çalıştırın.
SET odps.sql.common.table.planner.ext.hive.bridge = true;
SET odps.sql.hive.compatible = true;
SELECT * FROM oss_extable_paimon_pt WHERE dt='2024-07-18';
Aşağıdaki sonuç döndürülür:
+------------+------------+------------+
| id | data | dt |
+------------+------------+------------+
| 1 | CCC | 2024-07-18 |
| 2 | DDD | 2024-07-18 |
+------------+------------+------------+
Paimon dosyalarındaki şema ile harici tablo şeması farklılık gösteriyorsa:
Sütun sayısı uyuşmazlığı: Paimon dosyaları harici tablo DDL'sinden daha az sütun içeriyorsa MaxCompute eksik sütunları NULL olarak okur. Dosyalar daha fazla sütun içeriyorsa MaxCompute bunları yoksayar.
Sütun türü uyuşmazlığı: Bir Paimon STRING sütunundaki verileri MaxCompute INT sütununa okuyamazsınız. INT sütunundaki verileri STRING sütununa okuma işlemi desteklenir ancak önerilmez.
Desteklenen veri türleri
MaxCompute veri türleri hakkında daha fazla bilgi için bkz. Veri türü sürümleri 1,0 ve 2,0.
Paimon veri türü | MaxCompute 2,0 veri türü | Okuma/yazma desteği | Açıklama |
TINYINT | TINYINT | 8 bitlik işaretli tamsayı. | |
SMALLINT | SMALLINT | 16 bitlik işaretli tamsayı. | |
INT | INT | 32 bitlik işaretli tamsayı. | |
BIGINT | BIGINT | 64 bitlik işaretli tamsayı. | |
BINARY(MAX_LENGTH) | BINARY | İkili veri türü. Geçerli maksimum uzunluk 8 MB'dir. | |
FLOAT | FLOAT | 32 bitlik ikili kayan noktalı sayı. | |
DOUBLE | DOUBLE | 64 bitlik ikili kayan noktalı sayı. | |
DECIMAL(precision,scale) | DECIMAL(precision,scale) | Kesin ondalık sayısal tür. Varsayılan değer
| |
VARCHAR(n) | VARCHAR(n) | Değişken uzunluklu karakter türü. n uzunluğu belirtir ve 1 ile 65.535 arasında değişir. | |
CHAR(n) | CHAR(n) | Sabit uzunluklu karakter türü. n uzunluğu belirtir ve 1 ile 255 arasında değişir. | |
VARCHAR(MAX_LENGTH) | STRING | Dize türü. Geçerli maksimum uzunluk 8 MB'dir. | |
DATE | DATE | Tarih türü. Format | |
TIME, TIME(p) | Desteklenmez | Paimon TIME veri türü, saat dilimi içermeyen, saat, dakika ve saniyeden oluşan ve nanosaniye hassasiyetine sahip bir zamanı temsil eder. TIME(p), 0 ile 9 arasında kesirli saniye hassasiyetini belirtir. Varsayılan değer 0'dır. MaxCompute'ta karşılık gelen bir tür yoktur. | |
TIMESTAMP, TIMESTAMP(p) | TIMESTAMP_NTZ | Saat dilimi içermeyen ve nanosaniye hassasiyetine sahip bir zaman damgası türü. Bu veri türünü okumak için aşağıdaki komutu çalıştırarak yerel JNI köprüsünü devre dışı bırakmanız gerekir: | |
TIMESTAMP WITH LOCAL TIME_ZONE(9) | TIMESTAMP |
| |
TIMESTAMP WITH LOCAL TIME_ZONE(9) | DATETIME | Nanosaniye hassasiyetine sahip bir zaman damgası türü. Format | |
BOOLEAN | BOOLEAN | BOOLEAN türü. | |
ARRAY | ARRAY | Karmaşık bir tür. | |
MAP | MAP | Karmaşık bir tür. | |
ROW | STRUCT | Karmaşık bir tür. | |
MULTISET<t> | Desteklenmez | MaxCompute'ta karşılık gelen bir tür yoktur. | |
VARBINARY, VARBINARY(n), BYTES | BINARY | Değişken uzunluklu ikili dizelerin veri türü. |
Sorun giderme
Paimon harici tablo okunurken kSIGABRT hatası
-
Hata mesajı:
ODPS-0123144: Fuxi job failed - kSIGABRT(errCode:6) at Odps/*****_SQL_0_1_0_job_0/M1@f01b17437.cloud.eo166#3. Detail error msg: CRASH_CORE, maybe caused by jvm crash, please check your java udf/udaf/udtf. | fatalInstance: Odps/*****_SQL_0_1_0_job_0/M1#0_0 -
Neden:
Bu hata, JNI modunda bir TIMESTAMP_NTZ sütunu okuduğunuzda oluşur.
-
Çözüm:
Sorgunuzdan önce aşağıdaki komutu çalıştırarak JNI köprüsünü devre dışı bırakın:
SET odps.sql.common.table.jni.disable.native=true;
İlgili makaleler
MaxCompute Paimon harici tablolarını yönetmek için özel bir Flink kataloğu da kullanabilirsiniz. Bu sayede Flink kullanarak veri yazabilir ve MaxCompute'ta sorgulayabilirsiniz. Daha fazla bilgi için bkz. Flink kullanarak MaxCompute Paimon harici tablo oluşturma.