Megosztás a következőn keresztül:


Oktatóanyag: Adatok kinyeréséről, átalakításáról és betöltéséről interaktív lekérdezéssel az Azure HDInsightban

Ebben az oktatóanyagban egy nyers CSV-adatfájlt tölt le nyilvánosan elérhető repülési adatokból. Importálja a HDInsight-fürttárolóba, majd az Azure HDInsight interaktív lekérdezéseivel alakítja át az adatokat. Az adatok átalakítása után betölti az adatokat egy Azure SQL Database-adatbázisba Apache Sqoophasználatával.

Ez az oktatóanyag a következő feladatokat mutatja be:

  • A repülési mintaadatok letöltése
  • Adatok feltöltése HDInsight-fürtbe
  • Adatok átalakítása interaktív lekérdezéssel
  • Tábla létrehozása adatbázisban az Azure SQL Database-ben
  • Adatok exportálása adatbázisba a Sqoop használatával az Azure SQL Database-ben

Előfeltételek

A repülőjárat-adatok letöltése

  1. Keresse meg Kutatási és Innovatív Technológiai Adminisztráció, Közlekedési Statisztikai Hivatal.

  2. Törölje az összes mezőt a lapon, majd válassza ki a következő értékeket:

    Név Érték
    Év szűrése 2019
    Szűrési időszak Január
    Mezők 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. Válassza a Letöltés lehetőséget. A rendszer letölt egy .zip fájlt a kiválasztott adatmezőkkel.

Adatok feltöltése HDInsight-fürtbe

Az HDInsight fürthöz társított tárolóba számos módon tölthet fel adatokat. Ebben a szakaszban a scp használatával tölthet fel adatokat. Az adatok feltöltésének egyéb módjairól további információt Adatok feltöltése a HDInsightbacímű témakörben talál.

  1. Töltse fel a .zip fájlt a HDInsight-fürt főcsomópontjára. Az alábbi parancsot szerkessze úgy, hogy cseréli le a FILENAME helyére a .zip fájl nevét, és a CLUSTERNAME helyére a HDInsight-fürt nevét. Ezután nyisson meg egy parancssort, állítsa be a munkakönyvtárat a fájl helyére, majd írja be a következő parancsot:

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

    Ha a rendszer kéri, adja meg az igent vagy a nemet a folytatáshoz. A szöveg beíráskor nem látható az ablakban.

  2. Miután a feltöltés befejeződött, csatlakozzon a fürthöz az SSH-val. Az alábbi parancsot szerkessze úgy, hogy a CLUSTERNAME-t az HDInsight-fürt nevére cseréli le. Ezután írja be a következő parancsot:

    ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
    
  3. A környezeti változó beállítása SSH-kapcsolat létesítése után. Cserélje le FILE_NAME, SQL_SERVERNAME, SQL_DATABASE, SQL_USERés SQL_PASWORD a megfelelő értékekre. Ezután adja meg a következő parancsot:

    export FILENAME=FILE_NAME
    export SQLSERVERNAME=SQL_SERVERNAME
    export DATABASE=SQL_DATABASE
    export SQLUSER=SQL_USER
    export SQLPASWORD='SQL_PASWORD'
    
  4. Bontsa ki a .zip fájlt az alábbi parancs beírásával:

    unzip $FILENAME.zip
    
  5. Hozzon létre egy könyvtárat a HDInsight Storage-on, majd másolja a .csv fájlt a könyvtárba az alábbi parancs megadásával:

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

Adatok átalakítása Hive-lekérdezéssel

A Hive-feladatokat számos módon futtathatja egy HDInsight-fürtön. Ebben a szakaszban a Beeline-t használja egy Hive-feladat futtatásához. További információ a Hive-feladatok futtatásának egyéb módszereiről: Az Apache Hive használata a HDInsighton.

A Hive-feladat részeként importálja az adatokat a .csv fájlból egy Delaysnevű Hive-táblába.

  1. A HDInsight-fürthöz már telepített SSH-parancssorból az alábbi paranccsal hozzon létre és szerkesszen egy új fájlt flightdelays.hql:

    nano flightdelays.hql
    
  2. A fájl tartalma legyen a következő szöveg:

    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. A fájl mentéséhez nyomja le Ctrl + X, majd y, majd írja be.

  4. A Hive elindításához és a flightdelays.hql fájl futtatásához használja a következő parancsot:

    beeline -u 'jdbc:hive2://localhost:10001/;transportMode=http' -f flightdelays.hql
    
  5. Miután a flightdelays.hql szkript fut, az alábbi paranccsal nyisson meg egy interaktív Beeline-munkamenetet:

    beeline -u 'jdbc:hive2://localhost:10001/;transportMode=http'
    
  6. Amikor a jdbc:hive2://localhost:10001/> parancssor megjelenik, a következő lekérdezéssel nyerhet ki adatokat az importált repülőjárat-késési adatokból:

    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;
    

    Ez a lekérdezés lekéri azon városok listáját, ahol időjárás miatti késések történtek, valamint a késések átlagos idejét, és menti ezeket az adatokat a következő helyen: /tutorials/flightdelays/output. Később a Sqoop erről a helyről olvassa be az adatokat, amelyeket exportál az Azure SQL Database-be.

  7. A Beeline-ból való kilépéshez írja be a parancssorba a !quit parancsot.

SQL Database-tábla létrehozása

Számos módon csatlakozhat az SQL Database-hez, majd hozhat létre egy táblát. A következő lépések során a FreeTDS eszközt használjuk a HDInsight-fürtről.

  1. A FreeTDS telepítéséhez használja a következő parancsot a klaszterhez való megnyitott SSH-kapcsolatból:

    sudo apt-get --assume-yes install freetds-dev freetds-bin
    
  2. A telepítés befejezése után az alábbi paranccsal csatlakozzon az SQL Database-hez:

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

    A kimenet a következő szöveghez fog hasonlítani:

    locale is "en_US.UTF-8"
    locale charset is "UTF-8"
    using default charset "UTF-8"
    Default database being set to <yourdatabase>
    1>
    
  3. Az 1> parancssorban írja be a következő sorokat:

    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
    

    A GO utasítás megadásakor a rendszer kiértékeli az előző utasításokat. Ez az utasítás létrehoz egy nevű táblát, amely egy fürtözött indexet tartalmaz.

    A következő lekérdezés használatával ellenőrizze, hogy a tábla létrejött-e:

    SELECT * FROM information_schema.tables
    GO
    

    A kimenet az alábbi szöveghez hasonló:

    TABLE_CATALOG   TABLE_SCHEMA    TABLE_NAME      TABLE_TYPE
    databaseName       dbo             delays        BASE TABLE
    
  4. A tsql eszközből való kilépéshez írja be az exit kifejezést az 1> parancssorba.

Adatok exportálása AZ SQL Database-be az Apache Sqoop használatával

Az előző szakaszokban átmásolta az átalakított adatokat a(z) /tutorials/flightdelays/outputszámú helyre. Ebben a szakaszban a Sqoop használatával exportálja az adatokat a /tutorials/flightdelays/output-ból az Azure SQL Database-ben létrehozott táblába.

  1. Ellenőrizze, hogy a Sqoop látja-e az SQL-adatbázist az alábbi parancs beírásával:

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

    Ez a parancs visszaadja az adatbázisok listáját, beleértve azt az adatbázist is, amelyben korábban létrehozta a delays táblát.

  2. Adatok exportálása /tutorials/flightdelays/output a delays táblába az alábbi paranccsal:

    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
    

    A Sqoop a delays táblát tartalmazó adatbázishoz csatlakozik, és adatokat exportál a /tutorials/flightdelays/output könyvtárból a delays táblába.

  3. A sqoop parancs befejeződése után a tsql segédprogrammal csatlakozzon az adatbázishoz az alábbi parancs beírásával:

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

    Az alábbi utasítások segítségével ellenőrizheti, hogy az adatok exportálva lett-e a késési táblába:

    SELECT * FROM delays
    GO
    

    A táblában látnia kell az adatok listáját. A tábla a városok nevét és az egyes városokhoz tartozó átlagos késések idejét tartalmazza.

    Írja be a exit a tsql segédprogramból való kilépéshez.

Erőforrások tisztítása

Az oktatóanyag befejezése után érdemes törölni a klasztert. A HDInsight használatával az adatok az Azure Storage-ban lesznek tárolva, így biztonságosan törölheti a fürtöt, ha nincs használatban. A HDInsight-fürtökért is díjat számítunk fel, még akkor is, ha nincs használatban. Mivel a fürt díjai sokkal magasabbak, mint a tárolási díjak, érdemes törölni a fürtöket, amikor nincsenek használatban.

Egy HDInsight-fürt törléséről a böngésző, a PowerShell vagy az Azure CLI használatával a HDInsight-fürt törlése című részben olvashat.

Következő lépések

Ebben az oktatóanyagban egy nyers CSV-adatfájlt vett fel, egy HDInsight-fürttárolóba importálta, majd az Azure HDInsight interaktív lekérdezésével átalakította az adatokat. Lépjen tovább a következő oktatóanyagra az Apache Hive Warehouse-összekötő megismeréséhez.