ניהול נתונים בטבלה

במאמר הזה מוסבר איך לנהל נתונים בטבלאות ב-BigQuery. אפשר לעבוד עם נתונים מטבלאות BigQuery בדרכים הבאות:

  • טעינת נתונים לטבלה
  • הוספה לנתוני הטבלה או החלפה שלהם
  • עיון בנתונים בטבלה (או הצגתם בתצוגה מקדימה)
  • שאילתת נתונים בטבלה
  • שינוי נתונים בטבלה באמצעות שפת טיפול בנתונים (DML)
  • העתקת נתוני הטבלה
  • ייצוא נתוני טבלה

מידע על ניהול סכימות של טבלאות זמין במאמר שינוי סכימות של טבלאות.

לפני שמתחילים

מקצים תפקידים שמעניקים את ההרשאות הנדרשות למשתמשים שצריכים לבצע כל משימה במסמך הזה. ההרשאות שנדרשות (אם יש כאלה) לביצוע משימה מפורטות בקטע 'הרשאות נדרשות' של המשימה.

טעינת נתונים לטבלה

אפשר לטעון נתונים כשיוצרים טבלה, או ליצור טבלה ריקה ולטעון את הנתונים מאוחר יותר. כשמעלים נתונים, אפשר להשתמש בזיהוי אוטומטי של הסכימה עבור פורמטים נתמכים של נתונים, או לציין את הסכימה.

מידע נוסף על טעינת נתונים זמין במסמכי התיעוד לגבי הפורמט והמיקום של נתוני המקור:

הוספה לנתוני הטבלה והחלפתם

אפשר להחליף נתונים בטבלה באמצעות פעולת טעינה או שאילתה. אפשר להוסיף נתונים לטבלה קיימת על ידי ביצוע פעולת טעינה והוספה, או על ידי הוספת תוצאות של שאילתה לטבלה.

מידע נוסף על הוספה לטבלה או על החלפה של טבלה בזמן טעינת נתונים זמין במסמכי התיעוד של פורמט נתוני המקור:

כדי להוסיף נתונים לטבלה או להחליף את הנתונים בטבלה באמצעות תוצאות של שאילתה, צריך לציין טבלת יעד ולהגדיר את פעולת הכתיבה לאחת מהאפשרויות הבאות:

  • הוספה לטבלה – הוספת תוצאות השאילתה לטבלה קיימת.
  • החלפת טבלה – החלפה של טבלה קיימת עם אותו שם באמצעות תוצאות השאילתה.

אפשר להשתמש בשאילתה הבאה כדי לצרף רשומות מטבלה אחת לטבלה אחרת:

  INSERT INTO <projectID>.<datasetID>.<table1> (
    <column2>,
    <column3>) (SELECT * FROM <projectID>.<datasetID>.<table2>)

מידע נוסף על שימוש בתוצאות של שאילתות כדי להוסיף נתונים או להחליף נתונים זמין במאמר כתיבת תוצאות של שאילתות.

עיון בנתוני הטבלה

אפשר לעיין בנתוני הטבלה או לקרוא אותם בדרכים הבאות:

  • שימוש במסוף Cloud de Confiance
  • שימוש בפקודה bq head של כלי שורת הפקודה של bq
  • קריאה לשיטת ה-API‏ tabledata.list
  • שימוש בספריות הלקוח

ההרשאות הנדרשות

כדי לקרוא נתונים מטבלה וממחיצה, צריך הרשאה לניהול זהויות והרשאות גישה (IAM) ‏bigquery.tables.getData.

כל אחד מתפקידי ה-IAM המוגדרים מראש הבאים כולל את ההרשאות שדרושות לכם כדי לעיין בנתונים של טבלאות ומחיצות:

  • roles/bigquery.dataViewer
  • roles/bigquery.dataEditor
  • roles/bigquery.dataOwner
  • roles/bigquery.admin

אם יש לכם הרשאה bigquery.datasets.create, אתם יכולים לעיין בנתונים בטבלאות ובמחיצות של מערכי הנתונים שאתם יוצרים.

במאמר תפקידים והרשאות מוגדרים מראש יש מידע נוסף על תפקידים והרשאות ב-IAM ב-BigQuery.

עיון בנתוני הטבלה

כדי לעיין בנתוני הטבלה:

המסוף

  1. נכנסים לדף BigQuery במסוף Cloud de Confiance .

    כניסה ל-BigQuery

  2. בחלונית הימנית, לוחצים על כלי הניתוחים:

    כפתור מודגש לחלונית הסייר.

    אם החלונית הימנית לא מוצגת, לוחצים על הרחבת החלונית הימנית כדי לפתוח אותה.

  3. בחלונית Explorer, מרחיבים את הפרויקט, לוחצים על Datasets ואז בוחרים מערך נתונים.

  4. לוחצים על סקירה כללית > טבלאות ובוחרים את הטבלה.

  5. לוחצים על פרטים ורושמים את הערך שמופיע בשדה מספר השורות. יכול להיות שתצטרכו את הערך הזה כדי לשלוט בנקודת ההתחלה של התוצאות באמצעות כלי שורת הפקודה של BigQuery או ה-API.

  6. לוחצים על תצוגה מקדימה. מוצג מדגם של מערך הנתונים.

    תצוגה מקדימה של הטבלה

שורת פקודה

מריצים את הפקודה bq head עם הדגל --max_rows כדי להציג רשימה של כל העמודות במספר מסוים של שורות בטבלה. אם לא מציינים ערך לפרמטר --max_rows, ברירת המחדל היא 100.

כדי לעיין בקבוצת משנה של עמודות בטבלה (כולל עמודות מוטמעות ועמודות חוזרות), משתמשים בדגל --selected_fields ומזינים את העמודות כרשימה מופרדת בפסיקים.

כדי לציין את מספר השורות שרוצים לדלג עליהן לפני הצגת נתוני הטבלה, משתמשים בדגל --start_row=integer (או בקיצור הדרך -s). ערך ברירת המחדל הוא 0. אפשר לאחזר את מספר השורות בטבלה באמצעות הפקודה bq show כדי לאחזר את פרטי הטבלה.

אם הטבלה שאתם מעיינים בה נמצאת בפרויקט שאינו פרויקט ברירת המחדל שלכם, צריך להוסיף את מזהה הפרויקט לפקודה בפורמט הבא: project_id:dataset.table.

bq head \
--max_rows integer1 \
--start_row integer2 \
--selected_fields "columns" \
project_id:dataset.table

כאשר:

  • integer1 הוא מספר השורות שיוצגו.
  • integer2 הוא מספר השורות שיש לדלג עליהן לפני הצגת הנתונים.
  • columns היא רשימה מופרדת בפסיקים של עמודות.
  • project_id הוא מזהה הפרויקט.
  • dataset הוא השם של מערך הנתונים שמכיל את הטבלה.
  • table הוא שם הטבלה שרוצים לעיין בה.

דוגמאות:

מזינים את הפקודה הבאה כדי להציג את כל העמודות ב-10 השורות הראשונות ב-mydataset.mytable. ‫mydataset נמצא בפרויקט ברירת המחדל שלכם.

bq head --max_rows=10 mydataset.mytable

מזינים את הפקודה הבאה כדי להציג את כל העמודות ב-100 השורות הראשונות ב-mydataset.mytable. mydataset נמצא בmyotherproject, ולא בפרויקט ברירת המחדל שלך.

bq head myotherproject:mydataset.mytable

מזינים את הפקודה הבאה כדי להציג רק את field1 ואת field2 ב-mydataset.mytable. הפקודה משתמשת בדגל --start_row כדי לדלג לשורה 100. ‫mydataset.mytable נמצא בפרויקט ברירת המחדל שלכם.

bq head --start_row 100 --selected_fields "field1,field2" mydataset.mytable

מכיוון שהפקודה bq head לא יוצרת עבודת שאילתה, פקודות bq head לא מופיעות בהיסטוריית השאילתות, ולא תחויבו עליהן.

API

כדי לעיין בנתונים של טבלה, צריך להפעיל את tabledata.list. מציינים את שם הטבלה בפרמטר tableId.

אפשר להגדיר את הפרמטרים האופציונליים האלה כדי לשלוט בפלט:

  • maxResults — המספר המקסימלי של תוצאות להחזרה
  • selectedFields — רשימה של עמודות להחזרה, מופרדות בפסיקים. אם לא מצוין, כל העמודות מוחזרות.
  • startIndex – אינדקס מבוסס-אפס של שורת ההתחלה לקריאה

הערכים מוחזרים כשהם עטופים באובייקט JSON שצריך לנתח, כפי שמתואר במסמכי העיון של tabledata.list.

C#

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי C#הוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery C# API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.


using Google.Api.Gax;
using Google.Apis.Bigquery.v2.Data;
using Google.Cloud.BigQuery.V2;
using System;
using System.Linq;

public class BigQueryBrowseTable
{
    public void BrowseTable(
        string projectId = "your-project-id"
    )
    {
        BigQueryClient client = BigQueryClient.Create(projectId);
        TableReference tableReference = new TableReference()
        {
            TableId = "shakespeare",
            DatasetId = "samples",
            ProjectId = "bigquery-public-data"
        };
        // Load all rows from a table
        PagedEnumerable<TableDataList, BigQueryRow> result = client.ListRows(
            tableReference: tableReference,
            schema: null
        );
        // Print the first 10 rows
        foreach (BigQueryRow row in result.Take(10))
        {
            Console.WriteLine($"{row["corpus"]}: {row["word_count"]}");
        }
    }
}

Go

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Goהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Go API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.

בספריות הלקוח של Cloud ל-Go, החלוקה לדפים מתבצעת כברירת מחדל באופן אוטומטי, כך שלא צריך להטמיע אותה בעצמכם. לדוגמה:

import (
	"context"
	"fmt"
	"io"

	"cloud.google.com/go/bigquery"
	"google.golang.org/api/iterator"
)

// browseTable demonstrates reading data from a BigQuery table directly without the use of a query.
// For large tables, we also recommend the BigQuery Storage API.
func browseTable(w io.Writer, projectID, datasetID, tableID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydataset"
	// tableID := "mytable"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	table := client.Dataset(datasetID).Table(tableID)
	it := table.Read(ctx)
	for {
		var row []bigquery.Value
		err := it.Next(&row)
		if err == iterator.Done {
			break
		}
		if err != nil {
			return err
		}
		fmt.Fprintln(w, row)
	}
	return nil
}

Java

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Javaהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Java API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQuery.TableDataListOption;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.TableId;
import com.google.cloud.bigquery.TableResult;

// Sample to directly browse a table with optional paging
public class BrowseTable {

  public static void runBrowseTable() {
    // TODO(developer): Replace these variables before running the sample.
    String table = "MY_TABLE_NAME";
    String dataset = "MY_DATASET_NAME";
    browseTable(dataset, table);
  }

  public static void browseTable(String dataset, String table) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      // Identify the table itself
      TableId tableId = TableId.of(dataset, table);

      // Page over 100 records. If you don't need pagination, remove the pageSize parameter.
      TableResult result = bigquery.listTableData(tableId, TableDataListOption.pageSize(100));

      // Print the records
      result
          .iterateAll()
          .forEach(
              row -> {
                row.forEach(fieldValue -> System.out.print(fieldValue.toString() + ", "));
                System.out.println();
              });

      System.out.println("Query ran successfully");
    } catch (BigQueryException e) {
      System.out.println("Query failed to run \n" + e.toString());
    }
  }
}

Node.js

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Node.jsהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Node.js API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.

ספריות הלקוח של Cloud ל-Node.js מבצעות אוטומטית חלוקה לדפים כברירת מחדל, כך שלא צריך להטמיע חלוקה לדפים בעצמכם. לדוגמה:


// Import the Google Cloud client library and create a client
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function browseRows() {
  // Displays rows from "my_table" in "my_dataset".

  /**
   * TODO(developer): Uncomment the following lines before running the sample.
   */
  // const datasetId = "my_dataset";
  // const tableId = "my_table";

  // List rows in the table
  const [rows] = await bigquery
    .dataset(datasetId)
    .table(tableId)
    .getRows();

  console.log('Rows:');
  rows.forEach(row => console.log(row));
}

PHP

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי PHPהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery PHP API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.

החלוקה לדפים מתבצעת באופן אוטומטי בספריות הלקוח של Cloud עבור PHP באמצעות פונקציית הגנרטור rows, שמביאה את הדף הבא של התוצאות במהלך האיטרציה.

use Google\Cloud\BigQuery\BigQueryClient;

/** Uncomment and populate these variables in your code */
// $projectId = 'The Google project ID';
// $datasetId = 'The BigQuery dataset ID';
// $tableId   = 'The BigQuery table ID';
// $maxResults = 10;

$maxResults = 10;
$startIndex = 0;

$options = [
    'maxResults' => $maxResults,
    'startIndex' => $startIndex
];
$bigQuery = new BigQueryClient([
    'projectId' => $projectId,
]);
$dataset = $bigQuery->dataset($datasetId);
$table = $dataset->table($tableId);
$numRows = 0;
foreach ($table->rows($options) as $row) {
    print('---');
    foreach ($row as $column => $value) {
        printf('%s: %s' . PHP_EOL, $column, $value);
    }
    $numRows++;
}

Python

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Pythonהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Python API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.


from google.cloud import bigquery

# Construct a BigQuery client object.
client = bigquery.Client()

# TODO(developer): Set table_id to the ID of the table to browse data rows.
# table_id = "your-project.your_dataset.your_table_name"

# Download all rows from a table.
rows_iter = client.list_rows(table_id)  # Make an API request.

# Iterate over rows to make the API requests to fetch row data.
rows = list(rows_iter)
print("Downloaded {} rows from table {}".format(len(rows), table_id))

# Download at most 10 rows.
rows_iter = client.list_rows(table_id, max_results=10)
rows = list(rows_iter)
print("Downloaded {} rows from table {}".format(len(rows), table_id))

# Specify selected fields to limit the results to certain columns.
table = client.get_table(table_id)  # Make an API request.
fields = table.schema[:2]  # First two columns.
rows_iter = client.list_rows(table_id, selected_fields=fields, max_results=10)
rows = list(rows_iter)
print("Selected {} columns from table {}.".format(len(rows_iter.schema), table_id))
print("Downloaded {} rows from table {}".format(len(rows), table_id))

# Print row data in tabular format.
rows = client.list_rows(table, max_results=10)
format_string = "{!s:<16} " * len(rows.schema)
field_names = [field.name for field in rows.schema]
print(format_string.format(*field_names))  # Prints column headers.
for row in rows:
    print(format_string.format(*row))  # Prints row data.

Ruby

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Rubyהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Ruby API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.

החלוקה לדפים מתבצעת באופן אוטומטי בספריות הלקוח ב-Cloud עבור Ruby באמצעות Table#data ו-Data#next.

require "google/cloud/bigquery"

def browse_table
  bigquery = Google::Cloud::Bigquery.new project_id: "bigquery-public-data"
  dataset  = bigquery.dataset "samples"
  table    = dataset.table "shakespeare"

  # Load all rows from a table
  rows = table.data

  # Load the first 10 rows
  rows = table.data max: 10

  # Print row data
  rows.each { |row| puts row }
end

שליחת שאילתות לנתונים בטבלה

אפשר להריץ שאילתות על נתוני BigQuery באמצעות אחד מסוגי משימות השאילתה הבאים:

  • משימות אינטראקטיביות של שאילתות. כברירת מחדל, BigQuery מריץ שאילתות כעבודות שאילתה אינטראקטיביות, שמיועדות להתחיל לפעול במהירות האפשרית.

  • משימות של שאילתות באצווה. לשאילתות אצווה יש עדיפות נמוכה יותר מאשר לשאילתות אינטראקטיביות. כשפרויקט או הזמנה משתמשים בכל משאבי ה-Compute הזמינים, סביר יותר שהשאילתות של אצווה יוכנסו לתור וישארו בו. אחרי שמתחילים להריץ שאילתה באצווה, היא פועלת כמו שאילתה אינטראקטיבית. מידע נוסף זמין במאמר בנושא תורים של שאילתות.

  • משימות של שאילתות מתמשכות. בעזרת המשימות האלה, השאילתה פועלת באופן רציף, ומאפשרת לכם לנתח נתונים נכנסים ב-BigQuery בזמן אמת, ואז לכתוב את התוצאות בטבלה ב-BigQuery או לייצא את התוצאות ל-Bigtable או ל-Pub/Sub. אתם יכולים להשתמש ביכולת הזו כדי לבצע משימות שרגישות לזמן, כמו יצירת תובנות ופעולה מיידית על סמך התובנות האלה, הפעלת מסקנות של למידת מכונה (ML) בזמן אמת ויצירת צינורות נתונים מבוססי-אירועים.

אפשר להריץ משימות של שאילתות בדרכים הבאות:

מידע נוסף על שאילתות בטבלאות BigQuery זמין במאמר מבוא לשאילתות בנתוני BigQuery.

בנוסף לשאילתות על נתונים שמאוחסנים בטבלאות BigQuery, אפשר להריץ שאילתות על נתונים שמאוחסנים מחוץ ל-BigQuery. מידע נוסף זמין במאמר מבוא למקורות נתונים חיצוניים.

שינוי נתוני הטבלה

אפשר לשנות נתונים בטבלה באמצעות הצהרות של שפת טיפול בנתונים (DML) ב-SQL. פקודות DML מאפשרות לעדכן, למזג, להוסיף ולמחוק שורות בטבלאות. לדוגמאות ולחומר עזר בנושא התחביר של כל סוג של פקודת DML, אפשר לעיין במאמר פקודות DML ב-GoogleSQL.

דיאלקט SQL מדור קודם לא תומך בהצהרות DML. כדי לעדכן או למחוק נתונים באמצעות SQL מדור קודם, צריך למחוק את הטבלה ואז ליצור אותה מחדש עם נתונים חדשים. לחלופין, אפשר לכתוב שאילתה שמשנה את הנתונים ולכתוב את תוצאות השאילתה בטבלת יעד חדשה.

העתקת נתוני הטבלה

כדי להעתיק טבלה:

מידע נוסף על העתקת טבלאות זמין במאמר בנושא העתקת טבלה.

ייצוא נתונים מטבלה

אפשר לייצא נתונים מטבלה לקטגוריה של Cloud Storage בפורמט CSV,‏ JSON,‏ Avro או Parquet (גרסת Preview). אי אפשר לייצא למחשב המקומי, אבל אפשר להוריד ולשמור את תוצאות השאילתה באמצעות מסוף Cloud de Confiance .

מידע נוסף זמין במאמר בנושא ייצוא נתונים מטבלה.

אבטחת טבלאות

כדי לשלוט בגישה לטבלאות ב-BigQuery, אפשר לעיין במאמר בנושא שליטה בגישה למשאבים באמצעות IAM.

המאמרים הבאים