Hive-tabellen maken en gegevens laden vanuit Azure Blob StorageCreate Hive tables and load data from Azure Blob Storage

Dit artikel bevat algemene Hive-query's waarmee Hive-tabellen worden gemaakt en gegevens worden geladen vanuit Azure Blob-opslag.This article presents generic Hive queries that create Hive tables and load data from Azure blob storage. Er worden ook enkele richt lijnen gegeven voor het partitioneren van Hive-tabellen en het gebruik van de ORC-opmaak (Optimized Row in kolommen) om de query prestaties te verbeteren.Some guidance is also provided on partitioning Hive tables and on using the Optimized Row Columnar (ORC) formatting to improve query performance.

VereistenPrerequisites

In dit artikel wordt ervan uitgegaan dat u het volgende hebt:This article assumes that you have:

Gegevens uploaden naar Azure Blob StorageUpload data to Azure blob storage

Als u een virtuele machine van Azure hebt gemaakt met behulp van de instructies in een virtuele Azure-machine instellen voor geavanceerde analyses, moet dit script bestand zijn gedownload naar de map C: \ gebruikers \ <user name> \ documenten \ Data Science scripts op de virtuele machine.If you created an Azure virtual machine by following the instructions provided in Set up an Azure virtual machine for advanced analytics, this script file should have been downloaded to the C:\Users\<user name>\Documents\Data Science Scripts directory on the virtual machine. Deze Hive-query's vereisen alleen dat u een gegevens schema en Azure Blob-opslag configuratie opgeeft in de juiste velden die kunnen worden verzonden.These Hive queries only require that you provide a data schema and Azure blob storage configuration in the appropriate fields to be ready for submission.

We gaan ervan uit dat de gegevens voor Hive-tabellen een gedecomprimeerde tabel indeling hebben en dat de gegevens zijn geüpload naar de standaard container van het opslag account dat wordt gebruikt door het Hadoop-cluster.We assume that the data for Hive tables is in an uncompressed tabular format, and that the data has been uploaded to the default (or to an additional) container of the storage account used by the Hadoop cluster.

Als u wilt oefenen met de NYC, moet u het volgende doen:If you want to practice on the NYC Taxi Trip Data, you need to:

  • down load de 24 NYCe taxi-reis gegevens bestanden (12 retour bestanden en 12-ritbedrag bestanden),download the 24 NYC Taxi Trip Data files (12 Trip files and 12 Fare files),
  • pak alle bestanden uit in CSV-bestanden en klik vervolgensunzip all files into .csv files, and then
  • Upload deze naar de standaard (of geschikte container) van het Azure Storage-account; opties voor een dergelijk account worden weer gegeven bij gebruik Azure Storage met het onderwerp Azure HDInsight-clusters .upload them to the default (or appropriate container) of the Azure Storage account; options for such an account appear at Use Azure Storage with Azure HDInsight clusters topic. Het proces voor het uploaden van de CSV-bestanden naar de standaard container op het opslag account vindt u op deze pagina.The process to upload the .csv files to the default container on the storage account can be found on this page.

Hive-query's verzendenHow to submit Hive queries

Hive-query's kunnen worden verzonden met behulp van:Hive queries can be submitted by using:

Hive-query's zijn SQL-like.Hive queries are SQL-like. Als u bekend bent met SQL, is het mogelijk dat het onderdeel voor SQL-gebruikers Cheat Sheet nuttig is.If you are familiar with SQL, you may find the Hive for SQL Users Cheat Sheet useful.

Bij het verzenden van een Hive-query kunt u ook de bestemming van de uitvoer van Hive-query's beheren, of deze zich op het scherm bevindt of naar een lokaal bestand op het hoofd knooppunt of naar een Azure-Blob.When submitting a Hive query, you can also control the destination of the output from Hive queries, whether it be on the screen or to a local file on the head node or to an Azure blob.

Hive-query's verzenden via Hadoop-opdracht regel in hoofd knooppunt van Hadoop-clusterSubmit Hive queries through Hadoop Command Line in headnode of Hadoop cluster

Als de Hive-query complex is, leidt het verzenden van deze rechtstreeks in het hoofd knooppunt van het Hadoop-cluster ertoe toe dat deze sneller kan worden omzeild dan het verzenden met een Hive-editor of Azure PowerShell scripts.If the Hive query is complex, submitting it directly in the head node of the Hadoop cluster typically leads to faster turn around than submitting it with a Hive Editor or Azure PowerShell scripts.

Meld u aan bij het hoofd knooppunt van het Hadoop-cluster, open de Hadoop-opdracht regel op het bureau blad van het hoofd knooppunt en voer de opdracht in cd %hive_home%\bin .Log in to the head node of the Hadoop cluster, open the Hadoop Command Line on the desktop of the head node, and enter command cd %hive_home%\bin.

U kunt op drie manieren Hive-query's verzenden in de Hadoop-opdracht regel:You have three ways to submit Hive queries in the Hadoop Command Line:

  • rechtstreeksdirectly
  • '. HQL-bestanden gebruikenusing '.hql' files
  • met de Hive-opdracht consolewith the Hive command console

Hive-query's rechtstreeks verzenden in de Hadoop-opdracht regel.Submit Hive queries directly in Hadoop Command Line.

U kunt de opdracht uitvoeren als hive -e "<your hive query>; om eenvoudige Hive-query's rechtstreeks in Hadoop-opdracht regel in te dienen.You can run command like hive -e "<your hive query>; to submit simple Hive queries directly in Hadoop Command Line. Hier volgt een voor beeld waarin het rode vak een overzicht geeft van de opdracht waarmee de Hive-query wordt verzonden. in het groene vak wordt de uitvoer van de Hive-query beschreven.Here is an example, where the red box outlines the command that submits the Hive query, and the green box outlines the output from the Hive query.

Opdracht voor het verzenden van Hive-query met uitvoer van Hive-query

Hive-query's in. HQL-bestanden verzendenSubmit Hive queries in '.hql' files

Wanneer de Hive-query ingewik kelder is en meerdere lijnen heeft, is het bewerken van query's in opdracht regel of Hive-opdracht console niet praktisch.When the Hive query is more complicated and has multiple lines, editing queries in command line or Hive command console is not practical. U kunt ook een tekst editor gebruiken in het hoofd knooppunt van het Hadoop-cluster om de Hive-query's in een. HQL-bestand op te slaan in een lokale map van het hoofd knooppunt.An alternative is to use a text editor in the head node of the Hadoop cluster to save the Hive queries in a '.hql' file in a local directory of the head node. Vervolgens kan de Hive-query in het bestand '. HQL ' als volgt worden verzonden met behulp van het -f argument:Then the Hive query in the '.hql' file can be submitted by using the -f argument as follows:

hive -f "<path to the '.hql' file>"

Hive-query in een. HQL-bestand

Scherm afdruk van voortgangs status onderdrukken van Hive-query'sSuppress progress status screen print of Hive queries

Na het uitvoeren van Hive-query op de Hadoop-opdracht regel wordt de voortgang van de taak toewijzen/verminderen standaard afgedrukt op het scherm.By default, after Hive query is submitted in Hadoop Command Line, the progress of the Map/Reduce job is printed out on screen. Als u de scherm afdruk van de voortgang van de taak toewijzing/verminderen wilt onderdrukken, kunt u -S als volgt een argument ("S" in hoofd letters) op de opdracht regel gebruiken:To suppress the screen print of the Map/Reduce job progress, you can use an argument -S ("S" in upper case) in the command line as follows:

hive -S -f "<path to the '.hql' file>"
hive -S -e "<Hive queries>"

Hive-query's in Hive-opdracht console verzenden.Submit Hive queries in Hive command console.

U kunt ook eerst de Hive-opdracht console invoeren door de opdracht hive in Hadoop opdracht regel uit te voeren en vervolgens Hive-query's in Hive-opdracht console te verzenden.You can also first enter the Hive command console by running command hive in Hadoop Command Line, and then submit Hive queries in Hive command console. Hier volgt een voorbeeld.Here is an example. In dit voor beeld markeren de twee rode vakjes de opdrachten die worden gebruikt om de Hive-opdracht console in te voeren en de Hive-query die respectievelijk in de Hive-opdracht console is ingediend.In this example, the two red boxes highlight the commands used to enter the Hive command console, and the Hive query submitted in Hive command console, respectively. In het groene vak wordt de uitvoer van de Hive-query gemarkeerd.The green box highlights the output from the Hive query.

Component-opdracht console openen en opdracht invoeren, Hive-query-uitvoer weer geven

In de vorige voor beelden worden de Hive-query resultaten rechtstreeks op het scherm uitgevoerd.The previous examples directly output the Hive query results on screen. U kunt de uitvoer ook schrijven naar een lokaal bestand op het hoofd knooppunt of naar een Azure-Blob.You can also write the output to a local file on the head node, or to an Azure blob. Vervolgens kunt u andere hulpprogram ma's gebruiken om de uitvoer van Hive-query's verder te analyseren.Then, you can use other tools to further analyze the output of Hive queries.

Resultaten van de Hive-query van de uitvoer naar een lokaal bestand.Output Hive query results to a local file. Als u de resultaten van de Hive-query wilt uitvoeren naar een lokale map op het hoofd knooppunt, moet u de Hive-query in de Hadoop-opdracht regel als volgt indienen:To output Hive query results to a local directory on the head node, you have to submit the Hive query in the Hadoop Command Line as follows:

hive -e "<hive query>" > <local path in the head node>

In het volgende voor beeld wordt de uitvoer van Hive-query naar een bestand hivequeryoutput.txt in de map geschreven C:\apps\temp .In the following example, the output of Hive query is written into a file hivequeryoutput.txt in directory C:\apps\temp.

Scherm afbeelding toont de uitvoer van de Hive-query in een Hadoop-opdracht regel venster.

Resultaten van de query van de component uitvoer naar een Azure-BlobOutput Hive query results to an Azure blob

U kunt ook de resultaten van de Hive-query uitvoeren naar een Azure-Blob in de standaard container van het Hadoop-cluster.You can also output the Hive query results to an Azure blob, within the default container of the Hadoop cluster. De Hive-query hiervoor is als volgt:The Hive query for this is as follows:

insert overwrite directory wasb:///<directory within the default container> <select clause from ...>

In het volgende voor beeld wordt de uitvoer van Hive-query geschreven naar een BLOB-map queryoutputdir binnen de standaard container van het Hadoop-cluster.In the following example, the output of Hive query is written to a blob directory queryoutputdir within the default container of the Hadoop cluster. Hier hoeft u alleen de naam van de map op te geven, zonder de naam van de blob.Here, you only need to provide the directory name, without the blob name. Er wordt een fout gegenereerd als u namen van mappen en blobs opgeeft, zoals wasb:///queryoutputdir/queryoutput.txt .An error is thrown if you provide both directory and blob names, such as wasb:///queryoutputdir/queryoutput.txt.

Scherm afbeelding toont de vorige opdracht in het opdracht regel venster Hadoop.

Als u de standaard container van het Hadoop-cluster met Azure Storage Explorer opent, ziet u de uitvoer van de Hive-query, zoals weer gegeven in de volgende afbeelding.If you open the default container of the Hadoop cluster using Azure Storage Explorer, you can see the output of the Hive query as shown in the following figure. U kunt het filter (gemarkeerd door rood vak) Toep assen om alleen de BLOB op te halen met de opgegeven letters in namen.You can apply the filter (highlighted by red box) to only retrieve the blob with specified letters in names.

Azure Storage Explorer de uitvoer van de Hive-query wordt weer gegeven

Hive-query's verzenden met de Hive-editorSubmit Hive queries with the Hive Editor

U kunt ook de query console (Hive-editor) gebruiken door een URL van het formulier https: / / <Hadoop cluster name> . azurehdinsight.net/Home/HiveEditor in te voeren in een webbrowser.You can also use the Query Console (Hive Editor) by entering a URL of the form https://<Hadoop cluster name>.azurehdinsight.net/Home/HiveEditor into a web browser. U moet zijn aangemeld met de informatie in deze console en daarom moet u uw Hadoop-cluster referenties hier opgeven.You must be logged in the see this console and so you need your Hadoop cluster credentials here.

Hive-query's met Azure PowerShell-opdrachten verzendenSubmit Hive queries with Azure PowerShell Commands

U kunt ook Power shell gebruiken om Hive-query's te verzenden.You can also use PowerShell to submit Hive queries. Zie Hive-taken verzenden met Power shellvoor instructies.For instructions, see Submit Hive jobs using PowerShell.

Hive-data base en-tabellen makenCreate Hive database and tables

De Hive-query's worden gedeeld in de github-opslag plaats en kunnen van daaruit worden gedownload.The Hive queries are shared in the GitHub repository and can be downloaded from there.

Dit is de Hive-query waarmee een Hive-tabel wordt gemaakt.Here is the Hive query that creates a Hive table.

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");

Hier volgen de beschrijvingen van de velden die u nodig hebt om in te sluiten en andere configuraties:Here are the descriptions of the fields that you need to plug in and other configurations:

  • <database name>: de naam van de data base die u wilt maken.<database name>: the name of the database that you want to create. Als u alleen de standaard database wilt gebruiken, kan de query "Data Base maken..." worden wegge laten.If you just want to use the default database, the query "create database..." can be omitted.
  • <table name>: de naam van de tabel die u in de opgegeven Data Base wilt maken.<table name>: the name of the table that you want to create within the specified database. Als u de standaard database wilt gebruiken, kan de tabel rechtstreeks worden aangeduid door <table name> zonder <database name> .If you want to use the default database, the table can be directly referred by <table name> without <database name>.
  • <field separator>: het scheidings teken dat velden in het gegevens bestand begrenst dat naar de Hive-tabel moet worden geüpload.<field separator>: the separator that delimits fields in the data file to be uploaded to the Hive table.
  • <line separator>: het scheidings teken waarmee regels in het gegevens bestand worden gelimiteerd.<line separator>: the separator that delimits lines in the data file.
  • <storage location>: de locatie van de Azure Storage om de gegevens van Hive-tabellen op te slaan.<storage location>: the Azure Storage location to save the data of Hive tables. Als u geen locatie <storage location> opgeeft, worden de data base en de tabellen standaard opgeslagen in Hive/Warehouse/ Directory in de standaard container van het Hive-cluster.If you do not specify LOCATION <storage location>, the database and the tables are stored in hive/warehouse/ directory in the default container of the Hive cluster by default. Als u de opslag locatie wilt opgeven, moet de opslag locatie zich in de standaard container voor de data base en de tabellen bevinden.If you want to specify the storage location, the storage location has to be within the default container for the database and tables. Deze locatie moet worden aangeduid als locatie relatief ten opzichte van de standaard container van het cluster in de indeling ' wasb:/// <directory 1> /' of ' wasb:/// <directory 1> / <directory 2> /', enzovoort. Nadat de query is uitgevoerd, worden de relatieve directory's in de standaard container gemaakt.This location has to be referred as location relative to the default container of the cluster in the format of 'wasb:///<directory 1>/' or 'wasb:///<directory 1>/<directory 2>/', etc. After the query is executed, the relative directories are created within the default container.
  • TBLPROPERTIES ("Skip. header. line. Count" = "1"): als het gegevens bestand een header-regel bevat, moet u deze eigenschap toevoegen aan het einde van de query Create Table .TBLPROPERTIES("skip.header.line.count"="1"): If the data file has a header line, you have to add this property at the end of the create table query. Anders wordt de header regel geladen als een record in de tabel.Otherwise, the header line is loaded as a record to the table. Als het gegevens bestand geen header-regel heeft, kan deze configuratie worden wegge laten in de query.If the data file does not have a header line, this configuration can be omitted in the query.

Gegevens laden in Hive-tabellenLoad data to Hive tables

Dit is de Hive-query waarmee gegevens worden geladen in een Hive-tabel.Here is the Hive query that loads data into a Hive table.

LOAD DATA INPATH '<path to blob data>' INTO TABLE <database name>.<table name>;
  • <path to blob data>: Als het blobbestand dat moet worden geüpload naar de Hive-tabel zich in de standaard container van het HDInsight Hadoop-cluster bevindt, <path to blob data> moet de indeling ' wasb:// <directory in this container> / <blob file name> ' zijn.<path to blob data>: If the blob file to be uploaded to the Hive table is in the default container of the HDInsight Hadoop cluster, the <path to blob data> should be in the format 'wasb://<directory in this container>/<blob file name>'. Het blobbestand kan ook een extra container van het HDInsight Hadoop-cluster zijn.The blob file can also be in an additional container of the HDInsight Hadoop cluster. In dit geval <path to blob data> moet de indeling ' wasb:// <container name> @ <storage account name> . blob.core.Windows.net/ <blob file name> ' zijn.In this case, <path to blob data> should be in the format 'wasb://<container name>@<storage account name>.blob.core.windows.net/<blob file name>'.

    Notitie

    De BLOB-gegevens die naar de Hive-tabel moeten worden geüpload, moeten zich in de standaard-of extra container van het opslag account voor het Hadoop-cluster bevinden.The blob data to be uploaded to Hive table has to be in the default or additional container of the storage account for the Hadoop cluster. Als dat niet het geval is, kan de query voor het laden van gegevens geen toegang krijgen tot de gegevens.Otherwise, the LOAD DATA query fails complaining that it cannot access the data.

Geavanceerde onderwerpen: gepartitioneerde tabel-en opgeslagen Hive-gegevens in ORC-indelingAdvanced topics: partitioned table and store Hive data in ORC format

Als de gegevens groot zijn, is het partitioneren van de tabel nuttig voor query's die slechts enkele partities van de tabel hoeven te scannen.If the data is large, partitioning the table is beneficial for queries that only need to scan a few partitions of the table. Het is bijvoorbeeld redelijk de logboek gegevens van een website op datums te partitioneren.For instance, it is reasonable to partition the log data of a web site by dates.

Naast het partitioneren van Hive-tabellen is het ook handig om de Hive-gegevens op te slaan in de ORC-indeling (Optimized Row in kolom vorm).In addition to partitioning Hive tables, it is also beneficial to store the Hive data in the Optimized Row Columnar (ORC) format. Voor meer informatie over de ORC-indeling raadpleegt u Orc-bestanden gebruiken om de prestaties te verbeteren wanneer de Hive gegevens leest, schrijft en verwerkt.For more information on ORC formatting, see Using ORC files improves performance when Hive is reading, writing, and processing data.

Gepartitioneerde tabelPartitioned table

Hier volgt de Hive-query waarmee een gepartitioneerde tabel wordt gemaakt en er gegevens in worden geladen.Here is the Hive query that creates a partitioned table and loads data into it.

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>);

Bij het uitvoeren van query's op gepartitioneerde tabellen wordt aanbevolen om de partitie voorwaarde toe te voegen aan het begin van de where component, waardoor de efficiëntie van de zoek opdracht wordt verbeterd.When querying partitioned tables, it is recommended to add the partition condition in the beginning of the where clause, which improves the search efficiency.

select
    field1, field2, ..., fieldN
from <database name>.<partitioned table name>
where <partitionfieldname>=<partitionfieldvalue> and ...;

Hive-gegevens opslaan in de ORC-indelingStore Hive data in ORC format

U kunt gegevens niet rechtstreeks laden vanuit Blob-opslag in Hive-tabellen die zijn opgeslagen in de ORC-indeling.You cannot directly load data from blob storage into Hive tables that is stored in the ORC format. Hier volgen de stappen die u moet uitvoeren om gegevens van Azure-blobs te laden naar Hive-tabellen die zijn opgeslagen in de ORC-indeling.Here are the steps that the you need to take to load data from Azure blobs to Hive tables stored in ORC format.

Een externe tabel maken die is opgeslagen als TEXTFILE en gegevens uit de Blob-opslag in de tabel laden.Create an external table STORED AS TEXTFILE and load data from blob storage to the table.

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>;

Maak een interne tabel met hetzelfde schema als de externe tabel in stap 1, met hetzelfde veld scheidings teken en sla de Hive-gegevens op in de ORC-indeling.Create an internal table with the same schema as the external table in step 1, with the same field delimiter, and store the Hive data in the ORC format.

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;

Selecteer gegevens uit de externe tabel in stap 1 en voeg deze in de tabel ORC inSelect data from the external table in step 1 and insert into the ORC table

INSERT OVERWRITE TABLE <database name>.<ORC table name>
    SELECT * FROM <database name>.<external textfile table name>;

Notitie

Als de TEXTFILE-tabel <database name> . <external textfile table name>If the TEXTFILE table <database name>.<external textfile table name> heeft partities. in stap 3 selecteert de SELECT * FROM <database name>.<external textfile table name> opdracht de partitie variabele als een veld in de geretourneerde gegevensset.has partitions, in STEP 3, the SELECT * FROM <database name>.<external textfile table name> command selects the partition variable as a field in the returned data set. Deze in te voegen in de <database name> . <ORC table name>Inserting it into the <database name>.<ORC table name> mislukt sinds <database name> . <ORC table name>fails since <database name>.<ORC table name> heeft niet de partitie variabele als een veld in het tabel schema.does not have the partition variable as a field in the table schema. In dit geval moet u de velden die u wilt invoegen specifiek selecteren <database name> . <ORC table name>In this case, you need to specifically select the fields to be inserted to <database name>.<ORC table name> als volgt:as follows:

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>;

Het is veilig om de te verwijderen <external text file table name> Wanneer u de volgende query gebruikt nadat alle gegevens zijn ingevoegd in <database name> . <ORC table name>:It is safe to drop the <external text file table name> when using the following query after all data has been inserted into <database name>.<ORC table name>:

    DROP TABLE IF EXISTS <database name>.<external textfile table name>;

Nadat u deze procedure hebt voltooid, moet u een tabel met gegevens in de ORC-indeling maken die kan worden gebruikt.After following this procedure, you should have a table with data in the ORC format ready to use.