Menggunakan kueri Apache Hive untuk membuat tabel Apache Hive dan memuat data dari Azure Blob Storage.
Artikel ini menyajikan kueri Apache Hive generik yang membuat tabel Apache Hive dan memuat data dari Azure Blob Storage. Beberapa panduan juga disediakan pada partisi tabel Apache Hive dan menggunakan pemformatan Kolom Baris yang Dioptimalkan (ORC) untuk meningkatkan kinerja kueri.
Prasyarat
Artikel ini mengasumsikan bahwa Anda telah:
- Membuat akun Azure Storage Jika Anda memerlukan instruksi, lihat Tentang akun Azure Storage.
- Menyediakan kluster Hadoop yang disesuaikan dengan layanan HDInsight. Jika Anda memerlukan instruksi, lihat Kluster Pengaturan di HDInsight.
- Mengaktifkan akses jarak jauh ke klaster, log masuk, dan membuka konsol Baris-Perintah Hadoop. Jika Anda memerlukan instruksi, lihat Mengelola kluster Apache Hadoop.
Mengunggah data ke Azure Blob Storage
Jika Anda membuat mesin virtual Azure dengan mengikuti instruksi yang disediakan di Menyiapkan mesin virtual Azure untuk analitik tingkat lanjut, file skrip ini harus diunduh ke direktori C:\Users\<nama pengguna>\Documents\Data Science Scripts di komputer virtual. Kueri Apache Hive ini hanya mengharuskan Anda menyediakan skema data dan konfigurasi Azure Blob Storage di bidang yang sesuai agar siap untuk pengiriman.
Kami berasumsi bahwa data untuk tabel Apache Hive berada dalam format tabular yang tidak dikompresi, dan bahwa data telah diunggah ke kontainer default (atau ke tambahan) dari akun penyimpanan yang digunakan oleh kluster Hadoop.
Jika Anda ingin berlatih pada Data Perjalanan Taksi NYC, Anda perlu:
- unduh 24 file NYC Taxi Trip Data (12 file Perjalanan dan 12 file Tiket) -- baik yang tersedia melalui Azure Open Datasets atau dari sumber TLC Trip Record Data,
- unzip semua file ke berkas .csv, lalu
- Unggah ke default (atau kontainer yang sesuai) dari akun Azure Storage; opsi untuk akun tersebut muncul di topik Menggunakan Azure Storage dengan kluster Azure HDInsight. Proses untuk mengunggah file .csv ke kontainer default di akun penyimpanan dapat ditemukan di halaman ini.
Cara mengirimkan kueri Apache Hive
Kueri Apache Hive dapat dikirimkan dengan menggunakan:
- Mengirim kueri Apache Hive melalui Baris Perintah Hadoop di simpul kepala kluster Hadoop
- Mengirim kueri Apache Hive dengan Editor Teks Apache Hive
- Mengirim kueri Apache Hive dengan Perintah Azure PowerShell
Kueri Apache Hive seperti SQL. Jika Anda terbiasa dengan SQL, Anda mungkin akan merasa Sontekan Apache Hive untuk Pengguna SQL sangat berguna.
Saat mengirimkan kueri Apache Hive, Anda juga dapat mengontrol tujuan output dari kueri Apache Hive, baik itu di layar atau ke file lokal di simpul kepala atau ke Azure blob.
Mengirim kueri Apache Hive melalui Baris Perintah Hadoop di simpul kepala kluster Hadoop
Jika kueri Apache Hive kompleks, mengirimkannya langsung di simpul kepala kluster Hadoop biasanya menyebabkan berbalik lebih cepat daripada mengirimkannya dengan Editor teks Apache Hive atau skrip Azure PowerShell.
Log masuk ke simpul kepala kluster Hadoop, buka Baris Perintah Hadoop di desktop simpul kepala, dan masukkan perintah cd %hive_home%\bin.
Anda memiliki tiga cara untuk mengirimkan kueri Apache Hive di Baris Perintah Hadoop:
- secara langsung
- menggunakan file
.hql - dengan konsol perintah Apache Hive
Mengirim kueri Apache Hive langsung di Baris Perintah Hadoop.
Anda dapat menjalankan perintah seperti hive -e "<your hive query>; untuk mengirimkan kueri Apache Hive sederhana langsung di Baris Perintah Hadoop. Berikut adalah contoh, di mana kotak merah menguraikan perintah yang mengirimkan kueri Apache Hive, dan kotak hijau menguraikan output dari kueri Apache Hive.

Mengirim kueri Apache Hive dalam file .hql
Ketika kueri Hive lebih rumit dan memiliki beberapa baris, mengedit kueri di baris perintah atau konsol perintah Apache Hive tidak praktis. Alternatifnya adalah menggunakan editor teks di node kepala kluster Hadoop untuk menyimpan kueri Apache Hive dalam file '.hql di direktori lokal node kepala. Selanjutnya kueri Apache Hive dalam file .hql dapat dikirimkan dengan menggunakan argumen -f sebagai berikut:
hive -f "<path to the .hql file>"

Tahan cetak layar status kemajuan dari kueri Apache Hive
Secara default, setelah kueri Apache Hive dikirimkan di Baris Perintah Hadoop, kemajuan tugas Pemetaan/Pengurangan dicetak di layar. Untuk menahan cetakan layar Pemetaan/Pengurangan kemajuan pekerjaan, Anda bisa menggunakan argumen -S ("S" dalam huruf besar) di baris perintah sebagai berikut:
hive -S -f "<path to the .hql file>"
hive -S -e "<Hive queries>"
Mengirim kueri Apache Hive di konsol perintah Hive.
Anda juga dapat terlebih dahulu memasukkan konsol perintah Apache Hive dengan menjalankan perintah hive di Baris perintah Hadoop, lalu mengirimkan kueri Apache Hive di konsol perintah Apache Hive. Berikut adalah contohnya. Dalam contoh ini, dua kotak merah masing-masing menyoroti perintah yang digunakan untuk memasukkan konsol perintah Apache Hive, dan kueri Apache Hive yang dikirimkan di konsol perintah Apache Hive. Kotak hijau menyoroti output dari kueri Apache Hive.

Contoh sebelumnya langsung menghasilkan output kueri Apache Hive di layar. Anda juga dapat menulis output ke file lokal pada simpul kepala, atau ke blob Azure. Kemudian, Anda dapat menggunakan alat lain untuk menganalisis lebih lanjut output kueri Apache Hive.
Mengeluarkan hasil kueri Apache Hive ke file lokal. Untuk mengeluarkan hasil kueri Apache Hive ke direktori lokal pada simpul kepala, Anda harus mengirimkan kueri Apache Hive di Baris Perintah Hadoop sebagai berikut:
hive -e "<hive query>" > <local path in the head node>
Dalam contoh berikut, output kueri Apache Hive ditulis ke dalam file hivequeryoutput.txt dalam direktori C:\apps\temp.

Mengeluarkan hasil kueri Apache Hive ke blob Azure
Anda juga dapat mengeluarkan hasil kueri Apache Hive ke blob Azure, dalam kontainer default kluster Hadoop. Kueri Apache Hive untuk ini adalah sebagai berikut:
insert overwrite directory wasb:///<directory within the default container> <select clause from ...>
Dalam contoh berikut, output kueri Apache Hive ditulis ke direktori blob queryoutputdir dalam kontainer default kluster Hadoop. Di sini, Anda hanya perlu memberikan nama direktori, tanpa nama blob. Kesalahan dilemparkan jika Anda memberikan nama ke keduanya baik direktori maupun gumpalan, seperti wasb:///queryoutputdir/queryoutput.txt.

Jika Anda membuka kontainer default kluster Hadoop menggunakan Azure Storage Explorer, Anda bisa melihat output kueri Apache Hive seperti yang diperlihatkan dalam gambar berikut. Anda dapat menerapkan filter (disorot oleh kotak merah) untuk hanya mengambil blob dengan huruf tertentu dalam nama.

Mengirim kueri Apache Hive dengan Editor teks Apache Hive
Anda juga dapat menggunakan Konsol Kueri (Editor Apache Hive) dengan memasukkan URL berikut https://<Hadoop cluster name>.azurehdinsight.net/Home/HiveEditor ke browser web. Anda harus log masuk melihat konsol ini sehingga Anda memerlukan informasi masuk kluster Hadoop Anda di sini.
Mengirim kueri Apache Hive dengan Perintah Azure PowerShell
Anda juga dapat menggunakan PowerShell untuk mengirimkan kueri Apache Hive. Untuk instruksinya, lihat Mengirimkan pekerjaan Apache Hive menggunakan PowerShell.
Membuat database dan tabel Apache Hive
Kueri Apache Hive dibagikan di repositori GitHub dan dapat diunduh dari sana.
Berikut adalah kueri Apache Hive yang membuat tabel Apache Hive.
create database if not exists <database name>;
CREATE EXTERNAL TABLE if not exists <database name>.<table name>
(
field1 string,
field2 int,
field3 float,
field4 double,
...,
fieldN string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '<field separator>' lines terminated by '<line separator>'
STORED AS TEXTFILE LOCATION '<storage location>' TBLPROPERTIES("skip.header.line.count"="1");
Berikut adalah deskripsi bidang yang perlu Anda masukkan dan konfigurasi lainnya:
- <nama database>: nama database yang ingin Anda buat. Jika Anda hanya ingin menggunakan database default, kueri " membuat database... " dapat dihilangkan.
- <nama tabel>: nama tabel yang ingin Anda buat dalam databe tertentu. Jika Anda ingin menggunakan database default, tabel dapat langsung dirujuk dengan <nama tabel> tanpa <nama database>.
- <pemisah bidang>: pemisah yang memisahkan bidang dalam file data yang akan diunggah ke tabel Apache Hive.
- <pemisah baris>: pemisah yang memisahkan baris dalam file data.
- <lokasi penyimpanan>: lokasi Azure Storage untuk menyimpan data tabel Apache Hive. Jika Anda tidak menentukan LOKASI <lokasi penyimpanan>, database dan tabel disimpan di direktori hive/warehouse/ dalam kontainer default dari kluster Apache Hive secara default. Jika Anda ingin menentukan lokasi penyimpanannya, lokasi penyimpanan harus berada dalam kontainer default untuk database dan tabel. Lokasi ini harus disebut sebagai lokasi yang relatif terhadap kontainer default kluster dalam format 'wasb:///<directory 1>/' atau 'wasb:///<directory 1>/<directory 2>/', dll. Setelah kueri dijalankan, direktori relatif dibuat dalam kontainer default.
- TBLPROPERTIES("skip.header.line.count"="1") : Jika file data memiliki baris header, Anda harus menambahkan propertiini di akhir dari kueri membuat tabel. Jika tidak, baris header dimuat sebagai rekaman ke tabel. Jika file data tidak memiliki baris header, konfigurasi ini dapat dihilangkan dalam kueri.
Memuat data ke tabel Apache Hive
Berikut adalah kueri Apache Hive yang memuat data ke dalam tabel Apache Hive.
LOAD DATA INPATH '<path to blob data>' INTO TABLE <database name>.<table name>;
<jalur ke data blob>: jika file blob yang akan diunggah ke tabel Apache Hive ada dalam kontainer default kluster HDInsight Hadoop, <jalur ke data blob> harus dalam format direktori 'wasb://<dalam kontainer ini>/<nama file blob>'. File blob juga dapat berada dalam kontainer tambahan dari kluster HDInsight Hadoop. Dalam hal, <jalur ke data blob> harus dalam format 'wasb://<nama kontainer>@<nama akun penyimpanan>.blob.core.windows.net/<nama file blob>'.
Catatan
Data blob yang akan diunggah ke tabel Apache Hive harus berada di default atau kontainer tambahan akun penyimpanan untuk kluster Hadoop. Jika tidak, kueri MUAT DATA gagal mengeluh bahwa kueri tersebut tidak dapat mengakses data.
Topik lanjutan: tabel yang dipartisi dan simpan data Apache Hive dalam format ORC
Jika data besar, partisi tabel bermanfaat untuk kueri yang hanya perlu memindai beberapa partisi tabel. Misalnya, masuk akal untuk mempartisi data log situs web berdasarkan tanggal.
Selain mempartisi tabel Hive, juga bermanfaat untuk menyimpan data Apache Hive dalam format Kolom Baris yang Dioptimalkan (ORC). Untuk informasi selengkapnya tentang pemformatan ORC, lihat Menggunakan file ORC meningkatkan kinerja saat Apache Hive membaca, menulis, dan memproses data.
Tabel berpartisi
Berikut adalah kueri Apache Hive yang membuat tabel berpartisi dan memuat data ke dalamnya.
CREATE EXTERNAL TABLE IF NOT EXISTS <database name>.<table name>
(field1 string,
...
fieldN string
)
PARTITIONED BY (<partitionfieldname> vartype) ROW FORMAT DELIMITED FIELDS TERMINATED BY '<field separator>'
lines terminated by '<line separator>' TBLPROPERTIES("skip.header.line.count"="1");
LOAD DATA INPATH '<path to the source file>' INTO TABLE <database name>.<partitioned table name>
PARTITION (<partitionfieldname>=<partitionfieldvalue>);
Saat mengkueri tabel berpartisi, disarankan untuk menambahkan kondisi partisi di awalwhere klausa, yang meningkatkan efisiensi pencarian.
select
field1, field2, ..., fieldN
from <database name>.<partitioned table name>
where <partitionfieldname>=<partitionfieldvalue> and ...;
Menyimpan data Apache Hive dalam format ORC
Anda tidak dapat langsung memuat data dari penyimpanan blob ke tabel Apache Hive yang disimpan dalam format ORC. Berikut adalah langkah-langkah yang perlu Anda ambil untuk memuat data dari blob Azure ke tabel Apache Hive yang disimpan dalam format ORC.
Membuat tabel eksternal yang DISIMPAN SEBAGAI TEXTFILE dan memuat data dari penyimpanan blob ke tabel.
CREATE EXTERNAL TABLE IF NOT EXISTS <database name>.<external textfile table name>
(
field1 string,
field2 int,
...
fieldN date
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '<field separator>'
lines terminated by '<line separator>' STORED AS TEXTFILE
LOCATION 'wasb:///<directory in Azure blob>' TBLPROPERTIES("skip.header.line.count"="1");
LOAD DATA INPATH '<path to the source file>' INTO TABLE <database name>.<table name>;
Membuat tabel internal dengan skema yang sama dengan tabel eksternal di langkah 1, dengan pembatas bidang yang sama, dan menyimpan data Apache Hive dalam format ORC.
CREATE TABLE IF NOT EXISTS <database name>.<ORC table name>
(
field1 string,
field2 int,
...
fieldN date
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '<field separator>' STORED AS ORC;
Pilih data dari tabel eksternal di langkah 1 dan sisipkan ke dalam tabel ORC
INSERT OVERWRITE TABLE <database name>.<ORC table name>
SELECT * FROM <database name>.<external textfile table name>;
Catatan
Jika tabel TEXTFILE <nama database>.<nama tabel textfile eksternal> memiliki partisi, di LANGKAH 3, perintah SELECT * FROM <database name>.<external textfile table name> memilih variabel partisi sebagai bidang di himpunan data yang dikembalikan. Memasukannya ke dalam <nama database>.<na,a tabel ORC> gagal karena <nama database>.<nama tabel ORC> tidak memiliki variabel partisi sebagai bidang dalam skema tabel. Dalam hal ini, Anda harus secara khusus memilih bidang yang akan dimasukkan ke <nama database>.<nama tabel ORC> sebagai berikut:
INSERT OVERWRITE TABLE <database name>.<ORC table name> PARTITION (<partition variable>=<partition value>)
SELECT field1, field2, ..., fieldN
FROM <database name>.<external textfile table name>
WHERE <partition variable>=<partition value>;
Aman untuk menghapus <nama tabel file teks eksternal> saat menggunakan kueri berikut setelah semua data dimasukkan ke dalam <nama database>.<nama tabel ORC>:
DROP TABLE IF EXISTS <database name>.<external textfile table name>;
Setelah mengikuti prosedur ini, Anda harus memiliki tabel dengan data dalam format ORC yang siap digunakan.