1. Übersicht
BigQuery ist das vollständig verwaltete, kostengünstige Data Warehouse von Google für Analysen im Petabyte-Bereich. BigQuery ist ein NoOps-Angebot. Es muss keine Infrastruktur verwaltet werden und Sie benötigen keinen Datenbankadministrator. Sie können sich also ganz auf die Datenanalyse konzentrieren, um aussagekräftige Informationen zu erhalten, vertrautes SQL verwenden und unser Pay-as-you-go-Modell nutzen.
In diesem Codelab verwenden Sie die BigQuery-Clientbibliothek von Google Cloud, um öffentliche BigQuery-Datasets mit Node.js abzufragen.
Aufgaben in diesem Lab
- Cloud Shell verwenden
- BigQuery API aktivieren
- API-Anfragen authentifizieren
- BigQuery-Clientbibliothek für Node.js installieren
- Abfrage der Werke von Shakespeare
- GitHub-Dataset abfragen
- Caching und Anzeige von Statistiken anpassen
Voraussetzungen
- Google Cloud Platform-Projekt
- Browser, z. B. Chrome oder Firefox
- Vorkenntnisse im Umgang mit Node.js
Umfrage
Wie möchten Sie diese Anleitung nutzen?
<ph type="x-smartling-placeholder">Wie würden Sie Ihre Erfahrung mit Node.js bewerten?
<ph type="x-smartling-placeholder">Wie würden Sie Ihre Erfahrungen im Umgang mit Google Cloud Platform-Diensten bewerten?
<ph type="x-smartling-placeholder">2. Einrichtung und Anforderungen
Umgebung für das selbstbestimmte Lernen einrichten
- Melden Sie sich in der Cloud Console an und erstellen Sie ein neues Projekt oder verwenden Sie ein vorhandenes Projekt. Wenn Sie noch kein Gmail- oder G Suite-Konto haben, müssen Sie ein Konto erstellen.
Notieren Sie sich die Projekt-ID, also den projektübergreifend nur einmal vorkommenden Namen eines Google Cloud-Projekts. Der oben angegebene Name ist bereits vergeben und kann leider nicht mehr verwendet werden. Sie wird in diesem Codelab später als PROJECT_ID
bezeichnet.
- Als Nächstes müssen Sie in der Cloud Console die Abrechnung aktivieren, um Google Cloud-Ressourcen nutzen zu können.
Dieses Codelab sollte möglichst wenig kosten. Folgen Sie der Anleitung im Abschnitt „Bereinigen“, . Hier erfahren Sie, wie Sie Ressourcen herunterfahren, damit Ihnen über dieses Tutorial hinaus keine Kosten entstehen. Neue Google Cloud-Nutzer können an einem kostenlosen Testzeitraum mit 300$Guthaben teilnehmen.
Cloud Shell starten
Sie können das Cloud SDK-Befehlszeilentool zwar über Ihren Laptop aus der Ferne bedienen. In diesem Codelab verwenden Sie jedoch Google Cloud Shell, eine Befehlszeilenumgebung, die in der Cloud ausgeführt wird.
Cloud Shell aktivieren
- Klicken Sie in der Cloud Console auf Cloud Shell aktivieren .
Wenn Sie Cloud Shell noch nie gestartet haben, wird ein Zwischenbildschirm (below the fold) angezeigt, in dem beschrieben wird, worum es sich dabei handelt. Klicken Sie in diesem Fall auf Weiter. Der Chat wird nie wieder angezeigt. So sieht dieser einmalige Bildschirm aus:
Die Bereitstellung und Verbindung mit Cloud Shell dauert nur einen Moment.
Diese virtuelle Maschine verfügt über alle Entwicklungstools, die Sie benötigen. Es bietet ein Basisverzeichnis mit 5 GB nichtflüchtigem Speicher und wird in Google Cloud ausgeführt. Dadurch werden die Netzwerkleistung und die Authentifizierung erheblich verbessert. Viele, wenn nicht sogar alle Arbeiten in diesem Codelab können Sie ganz einfach mit einem Browser oder Ihrem Chromebook erledigen.
Sobald Sie mit Cloud Shell verbunden sind, sollten Sie sehen, dass Sie bereits authentifiziert sind und dass das Projekt bereits auf Ihre Projekt-ID eingestellt ist.
- Führen Sie in Cloud Shell den folgenden Befehl aus, um zu prüfen, ob Sie authentifiziert sind:
gcloud auth list
Befehlsausgabe
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
gcloud config list project
Befehlsausgabe
[core] project = <PROJECT_ID>
Ist dies nicht der Fall, können Sie die Einstellung mit diesem Befehl vornehmen:
gcloud config set project <PROJECT_ID>
Befehlsausgabe
Updated property [core/project].
3. Aktivieren der BigQuery-API
Die BigQuery API sollte in allen Google Cloud-Projekten standardmäßig aktiviert sein. Mit dem folgenden Befehl in Cloud Shell können Sie überprüfen, ob dies der Fall ist:
gcloud services list
Sie sollten BigQuery sehen:
NAME TITLE
bigquery-json.googleapis.com BigQuery API
...
Wenn die BigQuery API nicht aktiviert ist, können Sie sie mit dem folgenden Befehl in Cloud Shell aktivieren:
gcloud services enable bigquery-json.googleapis.com
4. API-Anfragen authentifizieren
Für Anfragen an die BigQuery API benötigen Sie ein Dienstkonto. Ein Dienstkonto gehört zu Ihrem Projekt und wird von der Google BigQuery-Clientbibliothek für Node.js verwendet, um BigQuery API-Anfragen zu senden. Wie jedes andere Nutzerkonto wird auch ein Dienstkonto durch eine E-Mail-Adresse repräsentiert. In diesem Abschnitt verwenden Sie das Cloud SDK, um ein Dienstkonto zu erstellen. Anschließend erstellen Sie Anmeldedaten, die Sie als Dienstkonto authentifizieren müssen.
Legen Sie zuerst eine Umgebungsvariable mit Ihrer PROJECT_ID fest, die Sie in diesem Codelab verwenden werden:
export GOOGLE_CLOUD_PROJECT=$(gcloud config get-value core/project)
Erstellen Sie als Nächstes ein neues Dienstkonto, um mit folgendem Befehl auf die BigQuery API zuzugreifen:
gcloud iam service-accounts create my-bigquery-sa --display-name "my bigquery codelab service account"
Erstellen Sie als Nächstes Anmeldedaten, mit denen Ihr Node.js-Code sich als neues Dienstkonto anmeldet. Erstellen Sie diese Anmeldedaten und speichern Sie sie als JSON-Datei „~/key.json“. indem Sie den folgenden Befehl verwenden:
gcloud iam service-accounts keys create ~/key.json --iam-account my-bigquery-sa@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com
Legen Sie schließlich die Umgebungsvariable GOOGLE_APPLICATION_CREDENTIALS fest, die von der C#-Bibliothek der BigQuery API verwendet wird (siehe nächster Schritt), um Ihre Anmeldedaten zu finden. Die Umgebungsvariable sollte auf den vollständigen Pfad der von Ihnen erstellten JSON-Datei mit Anmeldedaten festgelegt werden. Legen Sie die Umgebungsvariable mit dem folgenden Befehl fest:
export GOOGLE_APPLICATION_CREDENTIALS="/home/${USER}/key.json"
Hier finden Sie weitere Informationen zur Authentifizierung der BigQuery API.
5. Zugriffssteuerung einrichten
BigQuery nutzt Identity and Access Management (IAM), um den Zugriff auf Ressourcen zu verwalten. BigQuery verfügt über eine Reihe vordefinierter Rollen (user, dataOwner, dataViewer usw.), die Sie dem im vorherigen Schritt erstellten Dienstkonto zuweisen können. Weitere Informationen zur Zugriffssteuerung finden Sie in der BigQuery-Dokumentation.
Bevor Sie die öffentlichen Datasets abfragen können, müssen Sie sicherstellen, dass das Dienstkonto mindestens die Rolle bigquery.user hat. Führen Sie in Cloud Shell den folgenden Befehl aus, um dem Dienstkonto die Rolle bigquery.user zuzuweisen:
gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} --member "serviceAccount:my-bigquery-sa@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" --role "roles/bigquery.user"
Mit dem folgenden Befehl können Sie prüfen, ob dem Dienstkonto die Nutzerrolle zugewiesen ist:
gcloud projects get-iam-policy $GOOGLE_CLOUD_PROJECT
6. BigQuery-Clientbibliothek für Node.js installieren
Erstellen Sie zuerst den Ordner BigQueryDemo
und rufen Sie ihn auf:
mkdir BigQueryDemo
cd BigQueryDemo
Erstellen Sie als Nächstes ein Node.js-Projekt, mit dem Sie Beispiele zur BigQuery-Clientbibliothek ausführen:
npm init -y
Das erstellte Node.js-Projekt sollte angezeigt werden:
{
"name": "BigQueryDemo",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}
Installieren Sie die BigQuery-Clientbibliothek:
npm install --save @google-cloud/bigquery
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN BigQueryDemo@1.0.0 No description
npm WARN BigQueryDemo@1.0.0 No repository field.
+ @google-cloud/bigquery@2.1.0
added 69 packages from 105 contributors and audited 147 packages in 4.679s
found 0 vulnerabilities
Jetzt können Sie die Node.js-Clientbibliothek von BigQuery verwenden.
7. Die Werke von Shakespeare abfragen
Ein öffentliches Dataset ist ein Dataset, das in BigQuery gespeichert ist und der Allgemeinheit zugänglich gemacht wird. Es gibt viele weitere öffentliche Datasets, die Sie abfragen können. Einige dieser Datasets werden auch von Google gehostet, viele andere jedoch von Drittanbietern. Weitere Informationen finden Sie auf der Seite Öffentliche Datasets.
Zusätzlich zu den öffentlichen Datasets stellt BigQuery eine begrenzte Anzahl von Beispieltabellen zur Verfügung, die Sie abfragen können. Diese Tabellen sind in bigquery-public-data:samples dataset
enthalten. Eine dieser Tabellen heißt shakespeare.
. Sie enthält einen Wortindex der Werke von Shakespeare, der angibt, wie oft jedes Wort in jedem Korpus vorkommt.
In diesem Schritt fragen Sie die Shakespeare-Tabelle ab.
Öffnen Sie zuerst oben rechts in Cloud Shell den Code-Editor:
Erstellen Sie eine queryShakespeare.js
-Datei im Ordner BigQueryDemo
:
touch queryShakespeare.js
Gehen Sie zur Datei queryShakespeare.js
und fügen Sie den folgenden Code ein:
'use strict';
function main() {
// Import the Google Cloud client library
const {BigQuery} = require('@google-cloud/bigquery');
async function queryShakespeare() {
// Queries a public Shakespeare dataset.
// Create a client
const bigqueryClient = new BigQuery();
// The SQL query to run
const sqlQuery = `SELECT word, word_count
FROM \`bigquery-public-data.samples.shakespeare\`
WHERE corpus = @corpus
AND word_count >= @min_word_count
ORDER BY word_count DESC`;
const options = {
query: sqlQuery,
// Location must match that of the dataset(s) referenced in the query.
location: 'US',
params: {corpus: 'romeoandjuliet', min_word_count: 250},
};
// Run the query
const [rows] = await bigqueryClient.query(options);
console.log('Rows:');
rows.forEach(row => console.log(row));
}
queryShakespeare();
}
main();
Nehmen Sie sich ein bis zwei Minuten Zeit, um den Code zu untersuchen und zu sehen, wie die Tabelle abgefragt wird.
Führen Sie die Anwendung in Cloud Shell aus:
node queryShakespeare.js
Es sollte eine Liste mit Wörtern und ihrer Vorkommnisse angezeigt werden:
Rows:
{ word: 'the', word_count: 614 }
{ word: 'I', word_count: 577 }
{ word: 'and', word_count: 490 }
{ word: 'to', word_count: 486 }
{ word: 'a', word_count: 407 }
{ word: 'of', word_count: 367 }
{ word: 'my', word_count: 314 }
{ word: 'is', word_count: 307 }
...
8. GitHub-Dataset abfragen
Um sich mit BigQuery besser vertraut zu machen, führen Sie nun eine Abfrage für das öffentliche GitHub-Dataset aus. Die häufigsten Commit-Nachrichten finden Sie auf GitHub. Außerdem verwenden Sie die Web-UI von BigQuery für die Vorschau und Ausführung von Ad-hoc-Abfragen.
Öffnen Sie das GitHub-Dataset in der BigQuery-Web-UI, um die Daten anzusehen:
Wenn Sie schnell eine Vorschau der Daten sehen möchten, klicken Sie auf den Tab „Vorschau“:
Erstellen Sie die Datei queryGitHub.js
im Ordner BigQueryDemo
:
touch queryGitHub.js
Gehen Sie zur Datei queryGitHub.js
und fügen Sie den folgenden Code ein:
'use strict';
function main() {
// Import the Google Cloud client library
const {BigQuery} = require('@google-cloud/bigquery');
async function queryGitHub() {
// Queries a public GitHub dataset.
// Create a client
const bigqueryClient = new BigQuery();
// The SQL query to run
const sqlQuery = `SELECT subject AS subject, COUNT(*) AS num_duplicates
FROM \`bigquery-public-data.github_repos.commits\`
GROUP BY subject
ORDER BY num_duplicates
DESC LIMIT 10`;
const options = {
query: sqlQuery,
// Location must match that of the dataset(s) referenced in the query.
location: 'US',
};
// Run the query
const [rows] = await bigqueryClient.query(options);
console.log('Rows:');
rows.forEach(row => console.log(`${row.subject}: ${row.num_duplicates}`));
}
queryGitHub();
}
main();
Nehmen Sie sich ein bis zwei Minuten Zeit, um sich den Code anzusehen und zu sehen, wie die Tabelle nach den häufigsten Commit-Nachrichten abgefragt wird.
Führen Sie die Anwendung in Cloud Shell aus:
node queryGitHub.js
Es sollte eine Liste der Commit-Nachrichten und deren Vorkommen angezeigt werden:
Rows:
Update README.md: 2572220
: 1985733
Initial commit: 1940228
Mirroring from Micro.blog.: 646772
update: 592520
Update data.json: 548730
Update data.js: 548354
...
9. Caching und Statistiken
Wenn Sie eine Abfrage ausführen, speichert BigQuery die Ergebnisse im Cache. Dadurch benötigen nachfolgende identische Abfragen viel weniger Zeit. Es ist möglich, das Caching mithilfe der Abfrageoptionen zu deaktivieren. BigQuery verfolgt auch einige Statistiken zu den Abfragen, wie z. B. die Erstellungszeit, die Endzeit und die Gesamtzahl der verarbeiteten Byte.
In diesem Schritt deaktivieren Sie das Caching und zeigen einige Statistiken zu den Abfragen an.
Gehen Sie zur Datei queryShakespeare.js
im Ordner BigQueryDemo
und ersetzen Sie den Code durch folgenden Code:
'use strict';
function main() {
// Import the Google Cloud client library
const {BigQuery} = require('@google-cloud/bigquery');
async function queryShakespeareDisableCache() {
// Queries the Shakespeare dataset with the cache disabled.
// Create a client
const bigqueryClient = new BigQuery();
const sqlQuery = `SELECT word, word_count
FROM \`bigquery-public-data.samples.shakespeare\`
WHERE corpus = @corpus
AND word_count >= @min_word_count
ORDER BY word_count DESC`;
const options = {
query: sqlQuery,
// Location must match that of the dataset(s) referenced in the query.
location: 'US',
params: {corpus: 'romeoandjuliet', min_word_count: 250},
useQueryCache: false,
};
// Run the query as a job
const [job] = await bigqueryClient.createQueryJob(options);
console.log(`Job ${job.id} started.`);
// Wait for the query to finish
const [rows] = await job.getQueryResults();
// Print the results
console.log('Rows:');
rows.forEach(row => console.log(row));
// Print job statistics
console.log('JOB STATISTICS:')
console.log(`Status: ${job.metadata.status.state}`);
console.log(`Creation time: ${job.metadata.statistics.creationTime}`);
console.log(`Start time: ${job.metadata.statistics.startTime}`);
console.log(`Statement type: ${job.metadata.statistics.query.statementType}`);
}
queryShakespeareDisableCache();
}
main();
Wichtige Hinweise zum Code. Zuerst wird das Caching deaktiviert, indem UseQueryCache
im Objekt options
auf false
gesetzt wird. Zweitens haben Sie über das Jobobjekt auf die Statistiken zur Abfrage zugegriffen.
Führen Sie die Anwendung in Cloud Shell aus:
node queryShakespeare.js
Es sollte eine Liste der Commit-Nachrichten und deren Vorkommen angezeigt werden. Außerdem sollten einige Statistiken zur Abfrage angezeigt werden:
Rows:
{ word: 'the', word_count: 614 }
{ word: 'I', word_count: 577 }
{ word: 'and', word_count: 490 }
{ word: 'to', word_count: 486 }
{ word: 'a', word_count: 407 }
{ word: 'of', word_count: 367 }
{ word: 'my', word_count: 314 }
{ word: 'is', word_count: 307 }
{ word: 'in', word_count: 291 }
{ word: 'you', word_count: 271 }
{ word: 'that', word_count: 270 }
{ word: 'me', word_count: 263 }
JOB STATISTICS:
Status: RUNNING
Creation time: 1554309220660
Start time: 1554309220793
Statement type: SELECT
10. Daten in BigQuery laden
Wenn Sie Ihre eigenen Daten abfragen möchten, müssen Sie diese zuerst in BigQuery laden. BigQuery unterstützt das Laden von Daten aus vielen Quellen wie Google Cloud Storage, anderen Google-Diensten oder einer lokalen, lesbaren Quelle. Sie können sogar Ihre Daten streamen. Weitere Informationen finden Sie auf der Seite Daten in BigQuery laden.
In diesem Schritt laden Sie eine in Google Cloud Storage gespeicherte JSON-Datei in eine BigQuery-Tabelle. Die JSON-Datei befindet sich unter gs://cloud-samples-data/bigquery/us-states/us-states.json
.
Wenn Sie mehr über den Inhalt der JSON-Datei erfahren möchten, können Sie das gsutil
-Befehlszeilentool verwenden, um sie in Cloud Shell herunterzuladen:
gsutil cp gs://cloud-samples-data/bigquery/us-states/us-states.json .
Copying gs://cloud-samples-data/bigquery/us-states/us-states.json...
/ [1 files][ 2.0 KiB/ 2.0 KiB]
Operation completed over 1 objects/2.0 KiB.
Wie Sie sehen, enthält er die Liste der US-Bundesstaaten und jeder Bundesstaat ist ein JSON-Objekt in einer separaten Zeile:
less us-states.json
{"name": "Alabama", "post_abbr": "AL"}
{"name": "Alaska", "post_abbr": "AK"}
...
Um diese JSON-Datei in BigQuery zu laden, erstellen Sie im Ordner BigQueryDemo
die Dateien createDataset.js
und loadBigQueryJSON.js
:
touch createDataset.js
touch loadBigQueryJSON.js
Installieren Sie die Node.js-Clientbibliothek von Google Cloud Storage:
npm install --save @google-cloud/storage
Gehen Sie zur Datei createDataset.js
und fügen Sie den folgenden Code ein:
'use strict';
function main() {
// Import the Google Cloud client libraries
const {BigQuery} = require('@google-cloud/bigquery');
async function createDataset() {
const datasetId = "my_states_dataset3";
const bigqueryClient = new BigQuery();
// Specify the geographic location where the dataset should reside
const options = {
location: 'US',
};
// Create a new dataset
const [dataset] = await bigqueryClient.createDataset(datasetId, options);
console.log(`Dataset ${dataset.id} created.`);
}
createDataset();
}
main();
Gehen Sie dann zur Datei loadBigQueryJSON.js
und fügen Sie den folgenden Code ein:
'use strict';
function main() {
// Import the Google Cloud client libraries
const {BigQuery} = require('@google-cloud/bigquery');
const {Storage} = require('@google-cloud/storage');
const datasetId = "my_states_dataset3";
const tableId = "my_states_table";
async function createTable(datasetId, tableId) {
// Creates a new table
// Create a client
const bigqueryClient = new BigQuery();
const options = {
location: 'US',
};
// Create a new table in the dataset
const [table] = await bigqueryClient
.dataset(datasetId)
.createTable(tableId, options);
console.log(`Table ${table.id} created.`);
}
async function loadJSONFromGCS(datasetId, tableId) {
// Import a GCS file into a table with manually defined schema.
// Instantiate clients
const bigqueryClient = new BigQuery();
const storageClient = new Storage();
const bucketName = 'cloud-samples-data';
const filename = 'bigquery/us-states/us-states.json';
// Configure the load job.
const metadata = {
sourceFormat: 'NEWLINE_DELIMITED_JSON',
schema: {
fields: [
{name: 'name', type: 'STRING'},
{name: 'post_abbr', type: 'STRING'},
],
},
location: 'US',
};
// Load data from a Google Cloud Storage file into the table
const [job] = await bigqueryClient
.dataset(datasetId)
.table(tableId)
.load(storageClient.bucket(bucketName).file(filename), metadata);
// load() waits for the job to finish
console.log(`Job ${job.id} completed.`);
// Check the job's status for errors
const errors = job.status.errors;
if (errors && errors.length > 0) {
throw errors;
}
}
// createDataset(datasetId);
createTable(datasetId, tableId);
loadJSONFromGCS(datasetId, tableId);
}
main();
Nehmen Sie sich ein bis zwei Minuten Zeit, um zu sehen, wie der Code die JSON-Datei lädt und eine Tabelle (mit einem Schema) in einem Dataset erstellt.
Führen Sie die Anwendung in Cloud Shell aus:
node createDataset.js
node loadBigQueryJSON.js
In BigQuery werden ein Dataset und eine Tabelle erstellt:
Table my_states_table created.
Job [JOB ID] completed.
Um zu prüfen, ob das Dataset erstellt wurde, können Sie die BigQuery-Web-UI aufrufen. Sie sollten ein neues Dataset und eine Tabelle sehen. Wenn Sie zum Tab „Vorschau“ der Tabelle wechseln, sehen Sie die tatsächlichen Daten:
11. Glückwunsch!
Sie haben gelernt, wie BigQuery mit Node.js verwendet wird.
Bereinigen
So vermeiden Sie, dass Ihr Google Cloud Platform-Konto für die in diesem Schnellstart verwendeten Ressourcen belastet wird:
- Rufen Sie die Cloud Platform Console auf.
- Wählen Sie das Projekt aus, das Sie beenden möchten, und klicken Sie auf „Löschen“. oben: Dadurch wird das Projekt zum Löschen vorgemerkt.
Weitere Informationen
- Google BigQuery: https://cloud.google.com/bigquery/docs/
- Node.js auf der Google Cloud Platform: https://cloud.google.com/nodejs/
- Google BigQuery-Clientbibliothek für Node.js: https://github.com/googleapis/nodejs-bigquery
Lizenz
Dieser Text ist mit einer Creative Commons Attribution 2.0 Generic License lizenziert.