Topik ini menjelaskan cara menggunakan DataWorks untuk membuat dan mengonfigurasi tabel eksternal serta mencantumkan tipe data yang didukung dalam tabel tersebut.
Ikhtisar
Tabel berikut menjelaskan konsep-konsep penting yang perlu Anda pahami sebelum menggunakan tabel eksternal.
Konsep | Deskripsi |
Object Storage Service (OSS) | OSS mendukung kelas penyimpanan, termasuk Standar, Akses Jarang, dan Arsip, serta berlaku untuk berbagai skenario penyimpanan data. Selain itu, OSS dapat terintegrasi secara mendalam dengan komunitas open-source Hadoop dan produk lainnya seperti E-MapReduce (EMR), Batch Compute, MaxCompute, Machine Learning Platform for AI (PAI), dan Function Compute. |
MaxCompute | MaxCompute adalah solusi gudang data yang efisien dan dikelola sepenuhnya. Ini dapat digunakan bersama dengan OSS untuk memungkinkan Anda menganalisis dan memproses sejumlah besar data secara efisien dan hemat biaya. |
Fitur tabel eksternal MaxCompute | Kerangka komputasi generasi berikutnya dari MaxCompute V2.0 memungkinkan Anda menggunakan fitur tabel eksternal untuk langsung menanyakan banyak file di OSS, tanpa perlu memuat data ke dalam tabel MaxCompute. Ini mengurangi waktu dan biaya tenaga kerja yang diperlukan untuk migrasi data dan menurunkan biaya penyimpanan. |
Gambar berikut menunjukkan arsitektur keseluruhan dari tabel eksternal MaxCompute.
MaxCompute memungkinkan Anda membuat tabel eksternal untuk data tidak terstruktur, seperti data di OSS dan Tablestore. Kerangka pemrosesan data tidak terstruktur memungkinkan MaxCompute mengimpor dan mengekspor data ke dan dari OSS atau Tablestore berdasarkan logika transmisi dan pemrosesan data. Berikut adalah penjelasan logika pemrosesan menggunakan tabel eksternal OSS sebagai contoh:
Data eksternal dari bucket OSS dikonversi berdasarkan kerangka tidak terstruktur dan dilewatkan ke kelas InputStream Java. Anda dapat menulis kode untuk logika EXTRACT, yang melibatkan membaca, mengurai, mengonversi, dan menghitung data dari aliran masukan. Format catatan data yang diekstraksi harus didukung oleh MaxCompute.
Catatan data yang diekstraksi diproses lebih lanjut oleh mesin komputasi SQL terstruktur bawaan MaxCompute. Selama pemrosesan, lebih banyak catatan data mungkin dihasilkan.
Catatan data yang dihasilkan dilewatkan ke logika output yang ditentukan pengguna untuk komputasi dan konversi lebih lanjut. Sistem kemudian menggunakan kelas OutputStream Java untuk mengekspor data yang diperlukan dalam catatan data ke OSS.
Anda dapat menggunakan DataWorks bersama dengan MaxCompute untuk membuat, mencari, dan mengonfigurasi tabel eksternal melalui antarmuka visual di konsol DataWorks. Anda juga dapat menanyakan, memproses, dan menganalisis data dalam tabel eksternal.
Jaringan dan otorisasi akses
MaxCompute terpisah dari OSS. Oleh karena itu, konektivitas jaringan antara MaxCompute dan OSS pada kluster yang berbeda dapat memengaruhi kemampuan MaxCompute untuk mengakses data yang disimpan di OSS. Kami merekomendasikan agar Anda menggunakan titik akhir internal yang diakhiri dengan -internal.aliyuncs.com saat mengakses data yang disimpan di OSS dari MaxCompute.
MaxCompute memerlukan saluran otorisasi aman untuk mengakses data yang disimpan di OSS. MaxCompute menggunakan Resource Access Management (RAM) dan Security Token Service (STS) dari Alibaba Cloud untuk mengamankan akses data. MaxCompute meminta izin akses data dari STS sebagai pembuat tabel. Pengaturan izin untuk Tablestore sama dengan yang digunakan untuk OSS.
Lakukan otorisasi STS.
Untuk mengakses data OSS menggunakan fitur tabel eksternal MaxCompute, Anda harus memberikan izin akses OSS ke akun yang digunakan untuk menjalankan pekerjaan MaxCompute. STS adalah layanan manajemen token yang disediakan oleh layanan RAM dari Alibaba Cloud. Berdasarkan STS, pengguna RAM yang berwenang dan layanan cloud dapat mengeluarkan token dengan validitas dan izin kustom. Aplikasi dapat menggunakan token untuk memanggil operasi API Alibaba Cloud guna memanipulasi sumber daya.
Anda dapat menggunakan salah satu metode berikut untuk memberikan izin akses OSS:
Jika proyek MaxCompute Anda dan bucket OSS yang ingin Anda akses milik akun Alibaba Cloud yang sama, masuklah ke konsol DataWorks dengan akun tersebut dan lakukan otorisasi satu klik.
Buka tab konfigurasi tabel yang baru dibuat dan temukan bagian Physical Model.
Atur Table Type menjadi External Table.
Konfigurasikan parameter Storage Address dan klik Authorize.

Di halaman Cloud Resource Access Authorization, klik Confirm Authorization Policy.

Berikan MaxCompute izin untuk mengakses data yang disimpan di OSS di konsol RAM.
Masuk ke konsol RAM.
CatatanJika proyek MaxCompute Anda dan bucket OSS yang ingin Anda akses milik akun Alibaba Cloud yang berbeda, Anda harus menggunakan akun yang memiliki bucket OSS untuk masuk ke konsol RAM dan melakukan operasi berikut.
Di panel navigasi sisi kiri, pilih .
Di halaman Roles, klik Create Role. Pada panel Create Role, atur Select Trusted Entity menjadi Alibaba Cloud Account, lalu klik Next.
Konfigurasikan parameter RAM Role Name dan Note.
CatatanNama peran harus diatur ke AliyunODPSDefaultRole atau AliyunODPSRoleForOtherUser.
Pilih Current Alibaba Cloud Account atau Other Alibaba Cloud Account untuk Select Trusted Alibaba Cloud Account.
CatatanJika Anda memilih Other Alibaba Cloud Account, masukkan ID akun.
- Klik OK.
Konfigurasikan detail peran.
Di halaman Roles, temukan peran yang diinginkan dan klik nama peran di kolom Role Name. Di tab Trust Policy halaman yang muncul, klik Edit Trust Policy dan masukkan dokumen kebijakan berdasarkan kebutuhan bisnis Anda.
--Jika proyek MaxCompute dan bucket OSS milik akun yang sama, masukkan konten berikut: { "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": [ "odps.aliyuncs.com" ] } } ], "Version": "1" }-- Jika proyek MaxCompute dan bucket OSS milik akun yang berbeda, masukkan konten berikut: { "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": [ "ID akun Alibaba Cloud yang memiliki proyek MaxCompute@odps.aliyuncs.com" ] } } ], "Version": "1" }Setelah konfigurasi selesai, klik Save trust policy document.
Klik Grant Permission di kolom Actions peran di halaman Roles. Di panel Grant Permission, cari kebijakan AliyunODPSRolePolicy yang diperlukan untuk akses OSS dan lampirkan kebijakan ke peran. Jika Anda tidak dapat menemukan kebijakan dengan cara ini, klik nama peran di kolom Role Name. Di tab Permissions halaman yang muncul, klik Precise Permission untuk melampirkan kebijakan ke peran.
{ "Version": "1", "Statement": [ { "Action": [ "oss:ListBuckets", "oss:GetObject", "oss:ListObjects", "oss:PutObject", "oss:DeleteObject", "oss:AbortMultipartUpload", "oss:ListParts" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "ots:ListTable", "ots:DescribeTable", "ots:GetRow", "ots:PutRow", "ots:UpdateRow", "ots:DeleteRow", "ots:GetRange", "ots:BatchGetRow", "ots:BatchWriteRow", "ots:ComputeSplitPointsBySize" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "pvtz:DescribeRegions", "pvtz:DescribeZones", "pvtz:DescribeZoneInfo", "pvtz:DescribeVpcs", "pvtz:DescribeZoneRecords" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "dlf:CreateFunction", "dlf:BatchGetPartitions", "dlf:ListDatabases", "dlf:CreateLock", "dlf:UpdateFunction", "dlf:BatchUpdateTables", "dlf:DeleteTableVersion", "dlf:UpdatePartitionColumnStatistics", "dlf:ListPartitions", "dlf:DeletePartitionColumnStatistics", "dlf:BatchUpdatePartitions", "dlf:GetPartition", "dlf:BatchDeleteTableVersions", "dlf:ListFunctions", "dlf:DeleteTable", "dlf:GetTableVersion", "dlf:AbortLock", "dlf:GetTable", "dlf:BatchDeleteTables", "dlf:RenameTable", "dlf:RefreshLock", "dlf:DeletePartition", "dlf:UnLock", "dlf:GetLock", "dlf:GetDatabase", "dlf:GetFunction", "dlf:BatchCreatePartitions", "dlf:ListPartitionNames", "dlf:RenamePartition", "dlf:CreateTable", "dlf:BatchCreateTables", "dlf:UpdateTableColumnStatistics", "dlf:ListTableNames", "dlf:UpdateDatabase", "dlf:GetTableColumnStatistics", "dlf:ListFunctionNames", "dlf:ListPartitionsByFilter", "dlf:GetPartitionColumnStatistics", "dlf:CreatePartition", "dlf:CreateDatabase", "dlf:DeleteTableColumnStatistics", "dlf:ListTableVersions", "dlf:BatchDeletePartitions", "dlf:ListCatalogs", "dlf:UpdateTable", "dlf:ListTables", "dlf:DeleteDatabase", "dlf:BatchGetTables", "dlf:DeleteFunction" ], "Resource": "*", "Effect": "Allow" } ] }
Gunakan sumber data OSS.
Jika Anda telah menambahkan sumber data OSS ke DataWorks, temukan ruang kerja yang Anda buat di halaman Workspaces konsol DataWorks dan klik Manage di kolom Actions untuk pergi ke halaman SettingCenter. Kemudian, lihat dan gunakan sumber data di halaman Data Sources di SettingCenter.
Buat tabel eksternal
Buat tabel eksternal dengan mengeksekusi pernyataan DDL.
Pergi ke halaman DataStudio dan eksekusi pernyataan DDL untuk membuat tabel eksternal. Untuk informasi lebih lanjut, lihat Buat dan kelola tabel MaxCompute. Pernyataan DDL harus sesuai dengan sintaks MaxCompute. Jika otorisasi STS selesai, Anda tidak perlu menyertakan properti odps.properties.rolearn dalam pernyataan DDL.
Kode berikut memberikan contoh pernyataan DDL, di mana EXTERNAL menunjukkan tabel eksternal:
CREATE EXTERNAL TABLE IF NOT EXISTS ambulance_data_csv_external( vehicleId int, recordId int, patientId int, calls int, locationLatitute double, locationLongtitue double, recordTime string, direction string ) STORED BY 'com.aliyun.odps.udf.example.text.TextStorageHandler' -- Diperlukan. Klausul STORED BY menentukan nama kelas penanganan penyimpanan kustom atau format file lain untuk tabel eksternal. with SERDEPROPERTIES ( 'delimiter'='\\|', -- Opsional. Klausul SERDEPROPERTIES menentukan parameter yang digunakan saat data diserialisasi atau dideserialisasi. Parameter ini dapat dilewatkan ke logika EXTRACT melalui DataAttributes. 'odps.properties.rolearn'='acs:ram::xxxxxxxxxxxxx:role/aliyunodpsdefaultrole' ) LOCATION 'oss://oss-cn-shanghai-internal.aliyuncs.com/oss-odps-test/Demo/SampleData/CustomTxt/AmbulanceData/' -- Diperlukan. Parameter LOCATION menentukan lokasi tabel eksternal. USING 'odps-udf-example.jar'; -- Diperlukan jika Anda menggunakan kelas format kustom. Parameter USING menentukan paket JAR tempat kelas format kustom berada.STORED BY dapat diikuti oleh parameter yang menunjukkan penanganan penyimpanan bawaan untuk file CSV atau TSV.
com.aliyun.odps.CsvStorageHandler: mendefinisikan cara membaca data dari dan menulis data ke file CSV. Dengan spesifikasi ini, pemisah kolom adalah koma (,) dan line feed adalah \n. Contoh:STORED BY'com.aliyun.odps.CsvStorageHandler'.com.aliyun.odps.TsvStorageHandler: mendefinisikan cara membaca data dari dan menulis data ke file TSV. Dengan spesifikasi ini, pemisah kolom adalah \t dan line feed adalah \n.
STORED BY juga dapat diikuti oleh parameter yang menunjukkan an external table of which data is in one of the following open source formats: ORC, PARQUET, SEQUENCEFILE, RCFILE, AVRO, dan TEXTFILE. Sebagai contoh, Anda dapat menentukan kelas
org.apache.hive.hcatalog.data.JsonSerDeuntuk menyimpan tabel sebagai file teks.org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe -> disimpan sebagai textfile
org.apache.hadoop.hive.ql.io.orc.OrcSerde -> disimpan sebagai orc
org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe -> disimpan sebagai parquet
org.apache.hadoop.hive.serde2.avro.AvroSerDe -> disimpan sebagai avro
org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe -> disimpan sebagai sequencefile
Pernyataan DDL yang digunakan untuk membuat tabel eksternal yang datanya dalam format sumber terbuka:
CREATE EXTERNAL TABLE [IF NOT EXISTS] (<column schemas>) [PARTITIONED BY (partition column schemas)] [ROW FORMAT SERDE ''] STORED AS [WITH SERDEPROPERTIES ( 'odps.properties.rolearn'='${roleran}' [,'name2'='value2',...] ) ] LOCATION 'oss://${endpoint}/${bucket}/${userfilePath}/';Tabel berikut menjelaskan properti klausa SERDEPROPERTIES.
Properti
Nilai valid
Nilai default
Deskripsi
odps.text.option.gzip.input.enabled
true dan false
false
Menentukan apakah akan menekan file yang datanya ingin Anda baca.
odps.text.option.gzip.output.enabled
true dan false
false
Menentukan apakah akan menekan file yang datanya ingin Anda tulis.
odps.text.option.header.lines.count
Bilangan bulat non-negatif
0
Mengabaikan N baris pertama dari file teks.
odps.text.option.null.indicator
String
String kosong
String yang mewakili NULL.
odps.text.option.ignore.empty.lines
true dan false
true
Menentukan apakah akan mengabaikan baris kosong.
odps.text.option.encoding
UTF-8/UTF-16/US-ASCII
UTF-8
Menentukan format encoding file teks.
CatatanMaxCompute memungkinkan Anda menggunakan hanya ekstraktor bawaan untuk membaca file CSV atau TSV dalam format GZIP dari OSS. Anda dapat memilih apakah file tersebut dikompresi GZIP, yang menentukan properti yang perlu Anda tentukan.
Parameter LOCATION dalam format oss://oss-cn-shanghai-internal.aliyuncs.com/Nama Bucket/Nama Direktori. Anda dapat memperoleh direktori OSS di antarmuka pengguna grafis (GUI). Anda tidak perlu menambahkan nama file di sebelah direktori.
Anda dapat menemukan tabel yang dibuat menggunakan pernyataan DDL di panel Workspace Tables. Anda dapat mengubah folder level-1 dan level-2 tabel untuk mengubah lokasi tabel.
Buat tabel eksternal Tablestore.
Pernyataan yang digunakan untuk membuat tabel eksternal Tablestore:
CREATE EXTERNAL TABLE IF NOT EXISTS ots_table_external( odps_orderkey bigint, odps_orderdate string, odps_custkey bigint, odps_orderstatus string, odps_totalprice double ) STORED BY 'com.aliyun.odps.TableStoreStorageHandler' WITH SERDEPROPERTIES ( 'tablestore.columns.mapping'=':o_orderkey,:o_orderdate,o_custkey, o_orderstatus,o_totalprice', -- (3) 'tablestore.table.name'='ots_tpch_orders' 'odps.properties.rolearn'='acs:ram::xxxxx:role/aliyunodpsdefaultrole' ) LOCATION 'tablestore://odps-ots-dev.cn-shanghai.ots-internal.aliyuncs.com';Deskripsi parameter:
com.aliyun.odps.TableStoreStorageHandler menentukan penanganan penyimpanan bawaan MaxCompute untuk memproses data yang disimpan di Tablestore.
SERDEPROPERTIES menyediakan opsi untuk parameter. Anda harus menentukan tablestore.columns.mapping dan tablestore.table.name saat menggunakan TableStoreStorageHandler.
tablestore.columns.mapping: Diperlukan. Parameter ini menentukan kolom tabel Tablestore yang ingin diakses oleh MaxCompute. Kolom tersebut mencakup kolom kunci utama dan kolom properti. Kolom kunci utama ditandai dengan tanda titik dua (:) di awal nama kolom. Dalam contoh ini, kolom kunci utama adalah
:o_orderkeydan:o_orderdate. Yang lainnya adalah kolom properti.Tabel Tablestore mendukung maksimal empat kolom kunci utama. Tipe data kolom ini harus STRING, INTEGER, atau BINARY. Kolom kunci utama pertama juga merupakan kolom kunci partisi. Anda harus menentukan semua kolom kunci utama tabel di Tablestore saat menentukan pemetaan. Untuk kolom lainnya, Anda hanya perlu menentukan kolom properti yang perlu diakses oleh MaxCompute.
tablestore.table.name: nama tabel Tablestore. Jika nama tabel tidak ada di Tabletore, kesalahan dilaporkan, dan MaxCompute tidak membuat tabel di Tablestore.
LOCATION: menentukan nama dan Endpoints instance Tablestore.
Buat tabel di GUI.
Pergi ke halaman DataStudio dan buat tabel di GUI. Untuk informasi lebih lanjut, lihat Buat dan kelola tabel MaxCompute. Tabel eksternal memiliki properti berikut:
General
Nama Tabel (dimasukkan saat Anda membuat tabel)
Nama Tampilan
Tema Level-1 dan Tema Level-2
Deskripsi
Physical Model
Table Type: Pilih External Table.
Partition Type: Tabel eksternal Tablestore tidak mendukung partisi.
Storage Address: sesuai dengan parameter LOCATION. Di bagian Physical Model, Anda dapat memasukkan nilai parameter LOCATION sebagai alamat penyimpanan. Anda juga dapat mengklik Select untuk memilih alamat penyimpanan. Lalu, klik Authorize.
File Format: Pilih format file berdasarkan kebutuhan bisnis Anda. Format berikut didukung: CSV, TSV, ORC, PARQUET, SEQUENCEFILE, RCFILE, AVRO, TEXTFILE, dan format file kustom. Jika Anda memilih format file kustom, Anda perlu memilih sumber daya yang sesuai. Setelah Anda mengirimkan sumber daya, DataWorks secara otomatis mengurai nama kelas yang disertakan dan menampilkannya dalam daftar drop-down Nama Kelas.
rolearn: Jika Anda telah menyelesaikan otorisasi STS, Anda dapat membiarkannya kosong.
Schema

Parameter
Deskripsi
Data Type
MaxCompute 2.0 mendukung bidang tipe TINYINT, SMALLINT, INT, BIGINT, VARCHAR, dan STRING.
Actions
Operasi tambah, ubah, dan hapus didukung.
Definition or Maximum Value Length
Anda dapat mengatur panjang maksimum untuk bidang tipe VARCHAR. Untuk tipe data kompleks, masukkan definisi.
Tipe data yang didukung
Tabel berikut menjelaskan tipe data dasar yang didukung dalam tabel eksternal.
Tipe data | Baru | Contoh | Deskripsi |
TINYINT | Ya | 1Y dan -127Y | Tipe integer bertanda 8-bit. Nilai valid: -128 hingga 127. |
SMALLINT | Ya | 32767S dan -100S | Tipe integer bertanda 16-bit. Nilai valid: -32768 hingga 32767. |
INT | Ya | 1000 dan -15645787 | Tipe integer bertanda 32-bit. Nilai valid: -2^31 hingga 2^31-1. |
BIGINT | Tidak | 100000000000L dan -1L | Tipe integer bertanda 64-bit. Nilai valid: -2^63+1 hingga 2^63-1. |
FLOAT | Ya | Tidak ada | Tipe titik apung biner 32-bit. |
DOUBLE | Tidak | 3.1415926 1E+7 | Angka presisi ganda delapan byte (tipe titik apung biner 64-bit). |
DECIMAL | Tidak | 3.5BD dan 99999999999.9999999BD | Angka desimal eksak. Bagian bilangan bulat berada dalam rentang -1036 + 1 hingga 1036 - 1, dan bagian pecahan akurat hingga 10 hingga 18 tempat desimal. |
VARCHAR(n) | Ya | Tidak ada | Tipe karakter panjang variabel, di mana n menentukan panjang. Nilai valid: 1 hingga 65535. |
STRING | Tidak | "abc", 'bcd', dan "alibaba" | Tipe string. Ukuran maksimum adalah 8 MB. |
BINARY | Ya | Tidak ada | Angka biner. Ukuran maksimum adalah 8 MB. |
DATETIME | Tidak | DATETIME '2017-11-11 00:00:00' | Tipe DATETIME. UTC+8 digunakan sebagai zona waktu standar. Nilai valid: 0000-01-01 hingga 9999-12-31, akurat hingga milidetik. |
TIMESTAMP | Ya | TIMESTAMP '2017-11-11 00:00:00.123456789' | Tipe data TIMESTAMP, yang independen dari zona waktu. Nilai valid: 0000-01-01 00:00:00.000000000 hingga 9999-12-31 23:59:59.999999999, akurat hingga nanodetik. |
BOOLEAN | Tidak | TRUE dan FALSE | Tipe BOOLEAN. Nilai valid: TRUE dan FALSE. |
Tabel berikut mencantumkan tipe data kompleks yang didukung dalam tabel eksternal.
Tipe data | Metode kustom | Metode konstruksi |
ARRAY | array< int >; array< struct< a:int, b:string >> | array(1, 2, 3); array(array(1, 2); array(3, 4)) |
MAP | map< string, string >; map< smallint, array< string>> | map("k1", "v1", "k2", "v2"); map(1S, array('a', 'b'), 2S, array('x', 'y)) |
STRUCT | struct< x:int, y:int>; struct< field1:bigint, field2:array< int>, field3:map< int, int>> | named_struct('x', 1, 'y', 2); named_struct('field1', 100L, 'field2', array(1, 2), 'field3', map(1, 100, 2, 200)) |
Jika Anda ingin menggunakan tipe data baru yang didukung oleh MaxCompute 2.0, seperti TINYINT, SMALLINT, INT, FLOAT, VARCHAR, TIMESTAMP, BINARY, dan tipe data kompleks, Anda harus menyertakan set odps.sql.type.system.odps2=true; sebelum pernyataan yang digunakan untuk membuat tabel, dan kirimkan pernyataan set bersama dengan pernyataan pembuatan tabel. Jika kompatibilitas dengan Hive diperlukan, kami merekomendasikan agar Anda menyertakan pernyataan odps.sql.hive.compatible=true;.
Lihat dan proses tabel eksternal
Untuk melihat tabel eksternal, lakukan operasi berikut: Pergi ke halaman DataStudio ruang kerja Anda. Di panel navigasi sisi kiri, klik Workspace Tables. Untuk informasi lebih lanjut, lihat Kelola tabel. Tabel eksternal diproses dengan cara yang sama seperti tabel internal.