Bagikan melalui


Tutorial: Mengekstrak, mengubah, dan memuat data dengan menggunakan Interactive Query di Azure HDInsight

Dalam tutorial ini, Anda mengunduh file data CSV mentah dari data penerbangan yang tersedia untuk umum. Impor ke penyimpanan kluster HDInsight, lalu ubah data menggunakan Interactive Query di Azure HDInsight. Setelah data diubah, Anda memuat data tersebut ke dalam database di Azure SQL Database menggunakan Apache Sqoop.

Tutorial ini mencakup tugas-tugas berikut:

  • Mengunduh sampel data penerbangan
  • Mengunggah data ke kluster HDInsight
  • Mengubah data menggunakan Interactive Query
  • Membuat tabel dalam database di Azure SQL Database
  • Menggunakan Sqoop untuk mengekspor data ke database di Azure SQL Database

Prasyarat

Mengunduh data penerbangan

  1. Telusuri Administrasi Penelitian dan Teknologi Inovatif, Biro Statistik Transportasi.

  2. Di halaman tersebut, bersihkan semua bidang, lalu pilih nilai berikut ini:

    Nama Nilai
    Tahun Filter 2019
    Periode Filter Januari
    Bidang Year, FlightDate, Reporting_Airline, DOT_ID_Reporting_Airline, Flight_Number_Reporting_Airline, OriginAirportID, Origin, OriginCityName, OriginState, DestAirportID, Dest, DestCityName, DestState, DepDelayMinutes, ArrDelay, ArrDelayMinutes, CarrierDelay, WeatherDelay, NASDelay, SecurityDelay, LateAircraftDelay.
  3. Pilih Unduh. File .zip diunduh dengan bidang data yang Anda pilih.

Mengunggah data ke kluster HDInsight

Ada banyak cara untuk mengunggah data ke penyimpanan yang terkait dengan kluster HDInsight. Di bagian ini, Anda menggunakan scp untuk mengunggah data. Untuk mempelajari cara lain mengunggah data, lihat Mengunggah data ke HDInsight.

  1. Unggah file .zip ke head node kluster HDInsight. Edit perintah di bawah ini dengan mengganti FILENAME dengan nama file .zip, dan CLUSTERNAME dengan nama kluster HDInsight. Kemudian buka perintah, atur direktori kerja Anda ke lokasi file, lalu masukkan perintah:

    scp FILENAME.zip sshuser@CLUSTERNAME-ssh.azurehdinsight.net:FILENAME.zip
    

    Masukkan ya atau tidak untuk melanjutkan jika diminta. Teks tidak terlihat di jendela saat Anda mengetik.

  2. Setelah pengunggahan selesai, sambungkan ke kluster dengan menggunakan SSH. Edit perintah di bawah ini dengan mengganti CLUSTERNAME dengan nama kluster HDInsight. Masukkan perintah berikut:

    ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
    
  3. Siapkan variabel lingkungan setelah koneksi SSH dibuat. Ganti FILE_NAME, SQL_SERVERNAME, SQL_DATABASE, SQL_USER, dan SQL_PASWORD dengan nilai yang sesuai. Kemudian masukkan perintah:

    export FILENAME=FILE_NAME
    export SQLSERVERNAME=SQL_SERVERNAME
    export DATABASE=SQL_DATABASE
    export SQLUSER=SQL_USER
    export SQLPASWORD='SQL_PASWORD'
    
  4. Unzip file .zip dengan memasukkan perintah di bawah ini:

    unzip $FILENAME.zip
    
  5. Buat direktori pada penyimpanan HDInsight, lalu salin file .csv ke direktori dengan memasukkan perintah di bawah ini:

    hdfs dfs -mkdir -p /tutorials/flightdelays/data
    hdfs dfs -put $FILENAME.csv /tutorials/flightdelays/data/
    

Mengubah data menggunakan kueri Apache Hive

Ada banyak cara untuk menjalankan pekerjaan Apache Hive pada kluster HDInsight. Di bagian ini, Anda menggunakan Beeline untuk menjalankan pekerjaan Apache Hive. Untuk informasi tentang metode lain untuk menjalankan pekerjaan Apache Hive, lihat Menggunakan Apache Hive di HDInsight.

Sebagai bagian dari pekerjaan Apache Hive, Anda mengimpor data dari file .csv ke dalam tabel Apache Hive bernama Penundaan.

  1. Dari perintah SSH yang sudah Anda miliki untuk kluster HDInsight, gunakan perintah berikut untuk membuat dan mengedit file baru bernama flightdelays.hql:

    nano flightdelays.hql
    
  2. Gunakan teks berikut sebagai konten file:

    DROP TABLE delays_raw;
    -- Creates an external table over the csv file
    CREATE EXTERNAL TABLE delays_raw (
        YEAR string,
        FL_DATE string,
        UNIQUE_CARRIER string,
        CARRIER string,
        FL_NUM string,
        ORIGIN_AIRPORT_ID string,
        ORIGIN string,
        ORIGIN_CITY_NAME string,
        ORIGIN_CITY_NAME_TEMP string,
        ORIGIN_STATE_ABR string,
        DEST_AIRPORT_ID string,
        DEST string,
        DEST_CITY_NAME string,
        DEST_CITY_NAME_TEMP string,
        DEST_STATE_ABR string,
        DEP_DELAY_NEW float,
        ARR_DELAY_NEW float,
        CARRIER_DELAY float,
        WEATHER_DELAY float,
        NAS_DELAY float,
        SECURITY_DELAY float,
        LATE_AIRCRAFT_DELAY float)
    -- The following lines describe the format and location of the file
    ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
    LINES TERMINATED BY '\n'
    STORED AS TEXTFILE
    LOCATION '/tutorials/flightdelays/data';
    
    -- Drop the delays table if it exists
    DROP TABLE delays;
    -- Create the delays table and populate it with data
    -- pulled in from the CSV file (via the external table defined previously)
    CREATE TABLE delays AS
    SELECT YEAR AS year,
        FL_DATE AS flight_date,
        substring(UNIQUE_CARRIER, 2, length(UNIQUE_CARRIER) -1) AS unique_carrier,
        substring(CARRIER, 2, length(CARRIER) -1) AS carrier,
        substring(FL_NUM, 2, length(FL_NUM) -1) AS flight_num,
        ORIGIN_AIRPORT_ID AS origin_airport_id,
        substring(ORIGIN, 2, length(ORIGIN) -1) AS origin_airport_code,
        substring(ORIGIN_CITY_NAME, 2) AS origin_city_name,
        substring(ORIGIN_STATE_ABR, 2, length(ORIGIN_STATE_ABR) -1)  AS origin_state_abr,
        DEST_AIRPORT_ID AS dest_airport_id,
        substring(DEST, 2, length(DEST) -1) AS dest_airport_code,
        substring(DEST_CITY_NAME,2) AS dest_city_name,
        substring(DEST_STATE_ABR, 2, length(DEST_STATE_ABR) -1) AS dest_state_abr,
        DEP_DELAY_NEW AS dep_delay_new,
        ARR_DELAY_NEW AS arr_delay_new,
        CARRIER_DELAY AS carrier_delay,
        WEATHER_DELAY AS weather_delay,
        NAS_DELAY AS nas_delay,
        SECURITY_DELAY AS security_delay,
        LATE_AIRCRAFT_DELAY AS late_aircraft_delay
    FROM delays_raw;
    
  3. Untuk menyimpan file, tekan Ctrl + X, lalu y, lalu masukkan.

  4. Untuk memulai Apache Hive dan menjalankan file flightdelays.hql, gunakan perintah berikut:

    beeline -u 'jdbc:hive2://localhost:10001/;transportMode=http' -f flightdelays.hql
    
  5. Setelah skrip flightdelays.hql selesai dijalankan, gunakan perintah berikut untuk membuka sesi Beeline interaktif:

    beeline -u 'jdbc:hive2://localhost:10001/;transportMode=http'
    
  6. Saat Anda menerima perintah jdbc:hive2://localhost:10001/>, gunakan kueri berikut untuk mengambil data dari data keterlambatan flight yang diimpor:

    INSERT OVERWRITE DIRECTORY '/tutorials/flightdelays/output'
    ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
    SELECT regexp_replace(origin_city_name, '''', ''),
        avg(weather_delay)
    FROM delays
    WHERE weather_delay IS NOT NULL
    GROUP BY origin_city_name;
    

    Kueri ini mengambil daftar kota yang mengalami keterlambatan cuaca, bersama dengan waktu keterlambatan rata-rata, dan menyimpannya ke /tutorials/flightdelays/output. Kemudian, Sqoop membaca data dari lokasi ini dan mengekspornya ke Azure SQL Database.

  7. Untuk keluar dari Beeline, masukkan !quit di perintah.

Membuat tabel database SQL

Ada banyak cara untuk menyambungkan ke SQL Database dan membuat tabel. Langkah-langkah berikut menggunakan FreeTDS dari kluster HDInsight.

  1. Untuk menginstal FreeTDS, gunakan perintah berikut dari koneksi SSH terbuka ke kluster:

    sudo apt-get --assume-yes install freetds-dev freetds-bin
    
  2. Setelah penginstalan selesai, gunakan perintah berikut untuk menyambungkan ke SQL Database:

    TDSVER=8.0 tsql -H $SQLSERVERNAME.database.windows.net -U $SQLUSER -p 1433 -D $DATABASE -P $SQLPASWORD
    

    Anda akan menerima output yang mirip dengan teks berikut:

    locale is "en_US.UTF-8"
    locale charset is "UTF-8"
    using default charset "UTF-8"
    Default database being set to <yourdatabase>
    1>
    
  3. Di perintah 1>, masukkan baris berikut:

    CREATE TABLE [dbo].[delays](
    [origin_city_name] [nvarchar](50) NOT NULL,
    [weather_delay] float,
    CONSTRAINT [PK_delays] PRIMARY KEY CLUSTERED
    ([origin_city_name] ASC))
    GO
    

    Ketika pernyataan GO dimasukkan, pernyataan sebelumnya dievaluasi. Pernyataan ini membuat tabel bernama penundaan, dengan indeks berkluster.

    Gunakan kueri berikut untuk memverifikasi bahwa tabel telah dibuat:

    SELECT * FROM information_schema.tables
    GO
    

    Output yang dihasilkan mirip dengan teks berikut:

    TABLE_CATALOG   TABLE_SCHEMA    TABLE_NAME      TABLE_TYPE
    databaseName       dbo             delays        BASE TABLE
    
  4. Masukkan exit pada prompt 1> untuk keluar dari utilitas tsql.

Mengekspor data ke SQL Database menggunakan Apache Sqoop

Di bagian sebelumnya, Anda menyalin data yang diubah di /tutorials/flightdelays/output. Di bagian ini, Anda menggunakan Sqoop untuk mengekspor data dari /tutorials/flightdelays/output ke tabel yang Anda buat di Azure SQL Database.

  1. Verifikasi bahwa Sqoop dapat melihat database SQL Anda dengan memasukkan perintah di bawah ini:

    sqoop list-databases --connect jdbc:sqlserver://$SQLSERVERNAME.database.windows.net:1433 --username $SQLUSER --password $SQLPASWORD
    

    Perintah ini mengembalikan daftar database, termasuk database tempat Anda membuat tabel delays sebelumnya.

  2. Ekspor data dari /tutorials/flightdelays/output ke tabel delays dengan memasukkan perintah di bawah ini:

    sqoop export --connect "jdbc:sqlserver://$SQLSERVERNAME.database.windows.net:1433;database=$DATABASE" --username $SQLUSER --password $SQLPASWORD --table 'delays' --export-dir '/tutorials/flightdelays/output' --fields-terminated-by '\t' -m 1
    

    Sqoop tersambung ke database yang berisi tabel delays, dan mengekspor data dari direktori /tutorials/flightdelays/output ke tabel delays.

  3. Setelah perintah sqoop selesai, gunakan utilitas tsql untuk menyambungkan ke database dengan memasukkan perintah di bawah ini:

    TDSVER=8.0 tsql -H $SQLSERVERNAME.database.windows.net -U $SQLUSER -p 1433 -D $DATABASE -P $SQLPASWORD
    

    Gunakan pernyataan berikut untuk memverifikasi bahwa data telah diekspor sebelumnya ke tabel penundaan:

    SELECT * FROM delays
    GO
    

    Anda akan melihat daftar data dalam tabel. Tabel ini mencakup nama kota dan waktu keterlambatan penerbangan rata-rata untuk kota tersebut.

    Ketik exit untuk keluar dari utilitas tsql.

Membersihkan sumber daya

Setelah Anda menyelesaikan tutorial, Anda dapat menghapus kluster. Dengan HDInsight, data Anda disimpan di Azure Storage, sehingga Anda dapat menghapus kluster dengan aman saat tidak digunakan. Anda juga dikenakan biaya untuk kluster HDInsight, bahkan saat tidak digunakan. Karena biaya untuk kluster berkali-kali lebih banyak daripada biaya untuk penyimpanan, masuk akal secara ekonomis untuk menghapus kluster saat tidak digunakan.

Untuk menghapus kluster, lihat Hapus kluster HDInsight menggunakan browser, PowerShell, atau Azure CLI Anda.

Langkah berikutnya

Dalam tutorial ini, Anda mengambil file data CSV mentah, mengimpornya menjadi penyimpanan kluster HDInsight, dan kemudian mengubah data menggunakan Interactive Query di Azure HDInsight. Lanjutkan ke tutorial berikutnya untuk mempelajari tentang Apache Hive Warehouse Connector.