Topik ini menjelaskan cara membuat dan mengonfigurasi tabel eksternal di DataWorks serta mencantumkan tipe data yang didukung oleh tabel eksternal.
Ikhtisar
Sebelum menggunakan tabel eksternal, pahami konsep-konsep yang dijelaskan dalam tabel berikut.
|
Parameter |
Deskripsi |
|
Object Storage Service (OSS) |
OSS menyediakan kelas penyimpanan Standard, Infrequent Access, dan Archive untuk menangani berbagai skenario penyimpanan. OSS terintegrasi 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 data warehousing yang cepat dan sepenuhnya terkelola. Anda dapat mengintegrasikan MaxCompute dengan OSS untuk menganalisis dan memproses data dalam jumlah besar secara efisien dan hemat biaya. |
|
Tabel eksternal MaxCompute |
Ditenagai oleh mesin komputasi MaxCompute V2.0, tabel eksternal memungkinkan Anda langsung melakukan kueri terhadap file besar di OSS tanpa harus memuat data ke dalam tabel MaxCompute. Hal ini mengurangi waktu dan tenaga untuk migrasi data serta menghemat biaya penyimpanan. |
Gambar berikut menunjukkan arsitektur pemrosesan keseluruhan dari tabel eksternal.
MaxCompute mendukung pembuatan tabel eksternal untuk data dari layanan penyimpanan tak terstruktur, seperti OSS dan Tablestore. Framework pemrosesan tak terstruktur menangani impor dan ekspor data untuk platform MaxCompute. Sebagai contoh, berikut logika pemrosesan untuk tabel eksternal OSS:
-
Framework tak terstruktur mengubah data OSS eksternal dan menyediakannya ke kode kustom Anda melalui kelas Java
InputStream. Anda dapat mengimplementasikan logika EXTRACT untuk membaca, mengurai, mengubah, dan menghitung input dariInputStream, lalu mengembalikan data dalam format universalRecordyang dapat diproses oleh MaxCompute. -
Record-record tersebut dapat diproses menggunakan logika SQL di MaxCompute. Komputasi ini didasarkan pada mesin SQL terstruktur bawaan MaxCompute dan dapat menghasilkan record baru.
-
Sistem meneruskan record yang telah diproses ke logika OUTPUT kustom Anda untuk transformasi lebih lanjut. Anda kemudian dapat menggunakan
OutputStreamyang disediakan sistem untuk menulis informasi yang diperlukan dari record ke OSS.
Anda dapat menggunakan DataWorks bersama MaxCompute untuk melakukan berbagai operasi pada tabel eksternal secara visual, seperti membuat, mencari, mengkueri, mengonfigurasi, memproses, dan menganalisisnya.
Jaringan dan otorisasi akses
Karena MaxCompute dan OSS merupakan dua layanan independen, konektivitas jaringan antara kluster penerapannya dapat memengaruhi kemampuan MaxCompute untuk mengakses data di OSS. Saat mengakses data OSS dari MaxCompute, gunakan titik akhir internal OSS, yaitu alamat host yang diakhiri dengan -internal.aliyuncs.com.
MaxCompute memerlukan saluran otorisasi aman untuk mengakses data OSS. MaxCompute menggunakan Resource Access Management (RAM) dan Security Token Service (STS) Alibaba Cloud untuk memastikan akses data yang aman. Saat meminta izin, MaxCompute mengajukannya ke STS atas identitas pembuat tabel. Pengaturan izin untuk Tablestore sama dengan untuk OSS.
-
Otorisasi STS
Untuk mengakses data OSS, MaxCompute memerlukan izin yang sesuai yang diberikan kepada akun aksesnya. STS adalah layanan manajemen token aman yang disediakan oleh RAM. Layanan ini memungkinkan layanan cloud atau pengguna RAM yang berwenang untuk menerbitkan token akses sementara dengan periode validitas dan izin kustom. Aplikasi yang memperoleh token ini kemudian dapat memanggil API Alibaba Cloud untuk mengakses resource.
Anda dapat memberikan izin dengan salah satu dari dua cara berikut:
-
Jika proyek MaxCompute dan bucket OSS berada dalam satu Akun Alibaba Cloud yang sama, Anda dapat melakukan otorisasi satu klik setelah login dengan akun tersebut.
-
Buka halaman editor untuk tabel baru dan buka bagian Physical Model.
-
Untuk Table Type, pilih External Table.
-
Di sebelah Storage Address, klik Authorize. Lalu, klik Authorize lagi.
-
Pada kotak dialog Cloud Resource Access Authorization, klik Authorize. Pada halaman otorisasi, pilih peran AliyunODPSDefaultRole, yang digunakan oleh layanan ODPS untuk mengakses resource OSS dan Tablestore. Kemudian, klik Confirm Authorization.
-
-
Gunakan otorisasi kustom untuk memberikan akses MaxCompute ke OSS di Konsol RAM.
-
Login ke Konsol RAM.
CatatanJika MaxCompute dan OSS berada di akun berbeda, login dengan akun OSS untuk memberikan otorisasi.
-
Di panel navigasi kiri, pilih .
-
Klik Create Role, pilih Alibaba Cloud Account sebagai entitas tepercaya, lalu klik Next.
-
Masukkan Role name dan Remarks.
CatatanAtur nama peran menjadi AliyunODPSDefaultRole atau AliyunODPSRoleForOtherUser.
-
Untuk Select Trusted Alibaba Cloud Account, pilih Current Alibaba Cloud Account atau Another Alibaba Cloud Account.
CatatanJika Anda memilih Another Alibaba Cloud Account, Anda harus memasukkan ID akun lain tersebut.
- Klik OK.
-
Konfigurasikan detail peran.
Di halaman manajemen peran, klik nama peran RAM tersebut. Di tab Trust Policy, klik Edit Trust Policy dan masukkan konten kebijakan berikut sesuai skenario Anda.
-- Jika proyek MaxCompute dan bucket OSS berada dalam satu akun yang sama. { "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": [ "odps.aliyuncs.com" ] } } ], "Version": "1" }-- Jika proyek MaxCompute dan bucket OSS berada dalam akun berbeda. { "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": [ "ID akun Alibaba Cloud pemilik proyek MaxCompute@odps.aliyuncs.com" ] } } ], "Version": "1" }Setelah konfigurasi selesai, klik Save trust policy.
-
Konfigurasikan kebijakan otorisasi untuk peran tersebut. Temukan dan sambungkan kebijakan AliyunODPSRolePolicy, yang diperlukan agar peran dapat mengakses OSS. Jika tidak menemukan kebijakan ini saat mencari, Anda dapat membuat kebijakan kustom.
{ "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 membuat dan menyimpan sumber data OSS, temukan ruang kerja Anda di halaman Workspace list, klik Operation di kolom Management, lalu lihat dan gunakan sumber data tersebut di halaman Data Source.
Membuat tabel eksternal
-
Buat tabel menggunakan pernyataan DDL
Buka halaman Data Studio. Untuk informasi selengkapnya tentang cara membuat tabel menggunakan pernyataan DDL, lihat Buat dan gunakan tabel MaxCompute. Anda hanya perlu mengikuti sintaks standar MaxCompute. Jika Anda telah berhasil mengotorisasi layanan STS, Anda tidak perlu mengatur properti odps.properties.rolearn.
Pernyataan DDL contoh berikut menunjukkan cara membuat tabel. Parameter EXTERNAL menentukan bahwa tabel tersebut merupakan 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' -- Wajib. Klausul STORED BY menentukan nama kelas StorageHandler kustom atau format file lain untuk tabel eksternal. with SERDEPROPERTIES ( 'delimiter'='\\|', -- Opsional. Klausul SERDEPROPERTIES menentukan parameter yang digunakan untuk serialisasi dan deserialisasi data. Parameter ini dapat diteruskan ke logika Extractor 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/' -- Wajib. Klausul LOCATION menentukan lokasi penyimpanan tabel eksternal. USING 'odps-udf-example.jar'; -- Menentukan paket JAR yang berisi definisi kelas saat Anda menggunakan format kustom. Klausul ini tidak diperlukan jika Anda tidak menggunakan format kustom.Klausul STORED BY diikuti oleh parameter yang menentukan StorageHandler bawaan default untuk file CSV atau TSV. Parameter tersebut dijelaskan sebagai berikut:
-
CSV:
com.aliyun.odps.CsvStorageHandler. Handler ini mendefinisikan cara membaca dan menulis data berformat CSV. Secara konvensi, pemisah kolom adalah koma (,) dan pemisah baris adalah karakter newline (\n). Contoh:STORED BY 'com.aliyun.odps.CsvStorageHandler'. -
TSV:
com.aliyun.odps.TsvStorageHandler. Handler ini mendefinisikan cara membaca dan menulis data berformat TSV. Secara konvensi, pemisah kolom adalah tab (\t) dan pemisah baris adalah karakter newline (\n).
Klausul STORED BY juga mendukung external tables for open-source formats, seperti ORC, PARQUET, SEQUENCEFILE, RCFILE, AVRO, dan TEXTFILE. Untuk TEXTFILE, Anda dapat menentukan kelas serialisasi, seperti
org.apache.hive.hcatalog.data.JsonSerDe.-
org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe -> stored as textfile
-
org.apache.hadoop.hive.ql.io.orc.OrcSerde -> stored as orc
-
org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe -> stored as parquet
-
org.apache.hadoop.hive.serde2.avro.AvroSerDe -> stored as avro
-
org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe -> stored as sequencefile
Gunakan pernyataan DDL berikut untuk membuat tabel eksternal untuk format open-source.
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 SerDe.
Parameter
Nilai
Default
Deskripsi
odps.text.option.gzip.input.enabled
true/false
false
Mengaktifkan atau menonaktifkan kompresi baca.
odps.text.option.gzip.output.enabled
true/false
false
Mengaktifkan atau menonaktifkan kompresi tulis.
odps.text.option.header.lines.count
Bilangan bulat non-negatif
0
Melewatkan N baris pertama header file teks.
odps.text.option.null.indicator
String
String kosong
String yang merepresentasikan nilai NULL selama penguraian atau penulisan.
odps.text.option.ignore.empty.lines
true/false
true
Menentukan apakah baris kosong diabaikan.
odps.text.option.encoding
UTF-8/UTF-16/US-ASCII
UTF-8
Menentukan pengkodean karakter teks.
-
MaxCompute hanya mendukung pembacaan data CSV atau TSV terkompresi gzip dari OSS menggunakan extractor bawaan. Anda dapat memilih apakah file dikompresi gzip atau tidak, yang menentukan properti yang perlu diatur.
Parameter LOCATION memiliki format berikut: oss://oss-cn-shanghai-internal.aliyuncs.com/BucketName/DirectoryName. Anda dapat memilih alamat direktori OSS melalui kotak dialog GUI. Anda tidak perlu menambahkan nama file setelah direktori.
Tabel yang dibuat dalam mode DDL muncul di pohon node tabel di bawah manajemen tabel. Anda dapat mengubah posisi tampilannya dengan memodifikasi tema level-1 dan level-2.
Tabel eksternal Tablestore
Gunakan pernyataan berikut 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';
Parameter tersebut dijelaskan sebagai berikut:
-
com.aliyun.odps.TableStoreStorageHandler adalah StorageHandler bawaan di MaxCompute untuk memproses data Tablestore.
-
Klausul SERDEPROPERTIES menentukan opsi parameter. Saat menggunakan TableStoreStorageHandler, Anda harus menentukan dua opsi: tablestore.columns.mapping dan tablestore.table.name.
-
tablestore.columns.mapping: Opsi wajib yang menjelaskan kolom tabel Tablestore yang akan diakses oleh MaxCompute. Ini mencakup kunci primer dan atribut. Awalan titik dua (:) menunjukkan kunci primer Tablestore. Misalnya, dalam pernyataan ini,
:o_orderkeydan:o_orderdateadalah kunci primer, sedangkan yang lainnya adalah kolom atribut.Tablestore mendukung satu hingga empat kunci primer bertipe STRING, INTEGER, atau BINARY. Kunci primer pertama adalah kunci partisi. Saat menentukan pemetaan, Anda harus menyediakan semua kunci primer dari tabel Tablestore yang ditentukan. Untuk kolom atribut, Anda hanya perlu menyediakan kolom yang perlu diakses oleh MaxCompute.
-
tablestore.table.name: Nama tabel Tablestore yang akan diakses. Jika nama tabel yang ditentukan salah atau tidak ada, MaxCompute akan melaporkan error. MaxCompute tidak membuat tabel Tablestore secara otomatis.
-
-
LOCATION: Menentukan nama instans Tablestore, endpoint, dan detail lainnya.
Buat tabel melalui GUI
Buka halaman Data Studio dan buat tabel melalui GUI. Untuk informasi selengkapnya, lihat Buat dan gunakan tabel MaxCompute. Tabel eksternal memiliki properti berikut:
-
General
-
Nama tabel bahasa Inggris (dimasukkan saat Create Table)
-
Display Name
-
Level-1 Theme dan Level-2 Theme
-
Description
-
-
Physical Model
-
Table Type: Pilih External Table.
-
Partition Type: Partisi tidak didukung untuk tabel eksternal Tablestore.
-
Storage Address: Ini sesuai dengan parameter LOCATION. Anda dapat mengatur parameter LOCATION di bagian Physical Model. Klik Select untuk memilih alamat penyimpanan. Setelah memilih, klik Authorize.
-
File Format: Pilih format berdasarkan kebutuhan bisnis Anda. Format yang didukung meliputi CSV, TSV, ORC, PARQUET, SEQUENCEFILE, RCFILE, AVRO, TEXTFILE, dan format file kustom. Jika Anda memilih format file kustom, Anda harus memilih resource kustom. Saat Anda mengirimkan resource tersebut, nama kelas yang terdapat di dalamnya dapat diurai secara otomatis dan tersedia untuk dipilih.
-
rolearn: Anda dapat mengosongkan parameter ini jika otorisasi STS telah selesai.
-
-
Schema: Di bagian Schema, tambahkan bidang-bidang berikut:
age(BIGINT, usia),job(STRING, jenis pekerjaan),marital(STRING, status pernikahan),education(STRING, tingkat pendidikan), dandefault(STRING, status kartu kredit). Tidak ada bidang ini yang merupakan kunci primer.Parameter
Deskripsi
Field Type
MaxCompute 2.0 mendukung berbagai tipe data sederhana dan kompleks.
Operation
Mendukung penambahan, modifikasi, dan penghapusan bidang.
Definition or Maximum Value Length
Untuk tipe VARCHAR, Anda dapat mengatur panjangnya. Untuk tipe data kompleks, Anda dapat langsung memasukkan definisi tipe.
Tipe data yang didukung
Tabel berikut menjelaskan tipe data sederhana yang didukung oleh tabel eksternal.
|
Tipe |
Baru |
Contoh |
Deskripsi |
|
TINYINT |
Ya |
1Y, -127Y |
Bilangan bulat bertanda 8-bit. Nilainya berkisar dari -128 hingga 127. |
|
SMALLINT |
Ya |
32767S, -100S |
Bilangan bulat bertanda 16-bit. Nilainya berkisar dari -32.768 hingga 32.767. |
|
INT |
Ya |
1000, -15645787 |
Bilangan bulat bertanda 32-bit. Nilainya berkisar dari -231 hingga 231-1. |
|
BIGINT |
Tidak |
100000000000L, -1L |
Bilangan bulat bertanda 64-bit. Nilainya berkisar dari -263 hingga 263-1. |
|
FLOAT |
Ya |
N/A |
Bilangan titik mengambang biner 32-bit. |
|
DOUBLE |
Tidak |
3.1415926 1E+7 |
Bilangan titik mengambang biner presisi ganda 64-bit berukuran 8 byte. |
|
DECIMAL |
Tidak |
3.5BD, 99999999999.9999999BD |
Tipe numerik eksak basis-10. Bagian bilangan bulat berkisar dari -1036+1 hingga 1036-1, dan bagian pecahan presisi hingga 18 digit desimal. |
|
VARCHAR(n) |
Ya |
N/A |
Tipe karakter panjang variabel, dengan n sebagai panjangnya. Nilai n berkisar dari 1 hingga 65.535. |
|
STRING |
Tidak |
"abc", 'bcd', "alibaba" |
Tipe string. Panjang maksimumnya adalah 8 MB. |
|
BINARY |
Ya |
N/A |
Tipe data biner. Panjang maksimumnya adalah 8 MB. |
|
DATETIME |
Tidak |
DATETIME '2017-11-11 00:00:00' |
Tipe tanggal dan waktu yang menggunakan UTC+8 sebagai waktu standar sistem. Nilainya berkisar dari 0000-01-01 hingga 9999-12-31 dan akurat hingga milidetik. |
|
TIMESTAMP |
Ya |
TIMESTAMP '2017-11-11 00:00:00.123456789' |
Tipe timestamp yang tidak bergantung zona waktu. Nilainya berkisar dari 0000-01-01 00:00:00.000000000 hingga 9999-12-31 23:59:59.999999999 dan akurat hingga nanodetik. |
|
BOOLEAN |
Tidak |
TRUE dan FALSE |
Tipe BOOLEAN, yang nilainya TRUE atau FALSE. |
Tabel berikut menjelaskan tipe data kompleks yang didukung oleh tabel eksternal.
|
Tipe |
Definisi |
Konstruktor |
|
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 perlu menggunakan tipe data baru yang didukung oleh MaxCompute 2.0, seperti TINYINT, SMALLINT, INT, FLOAT, VARCHAR, TIMESTAMP, BINARY, atau tipe kompleks, Anda harus menambahkan pernyataan set odps.sql.type.system.odps2=true; sebelum pernyataan pembuatan tabel. Kirimkan pernyataan set dan pernyataan pembuatan tabel tersebut bersamaan. Untuk kompatibilitas Hive, tambahkan pernyataan set odps.sql.hive.compatible=true;.
Lihat dan kelola tabel eksternal
Anda dapat membuka halaman Data Studio dan klik Table Management di panel navigasi kiri untuk mengkueri tabel eksternal. Untuk informasi selengkapnya, lihat Manajemen tabel. Mengelola tabel eksternal mirip dengan mengelola tabel internal.