יצירת טבלאות חיצוניות ב-Cloud Storage

טבלאות חיצוניות של Cloud Storage מאפשרות לשלוח שאילתות על נתונים בפורמטים כמו CSV,‏ JSON,‏ Avro,‏ ORC ו-Parquet ישירות מ-BigQuery, בלי לטעון אותם לאחסון של BigQuery. במאמר הזה מוסבר איך ליצור טבלאות חיצוניות בנתונים מחולקים למחיצות ובנתונים שלא מחולקים למחיצות, איך לשלוח אליהן שאילתות ואיך לשדרג אותן לטבלאות BigLake.

כדי לשלוח שאילתה לטבלה חיצונית, אתם צריכים הרשאות גם לטבלה וגם לקובצי Cloud Storage. אם אפשר, השתמשו במקום זאת בטבלת BigLake, כי הקצאת גישה פירושה שהמשתמשים צריכים הרשאות רק בטבלה.

פורמטים וסוגי אחסון נתמכים

ב-BigQuery אפשר לשלוח שאילתות על נתונים ב-Cloud Storage בפורמטים הבאים:

  • ערכים מופרדים בפסיקים (‎CSV)
  • ‫JSON (מופרד בשורות חדשות)
  • Avro
  • ORC
  • Parquet
  • ייצוא מ-Datastore
  • ייצוא מ-Firestore

ב-BigQuery אפשר להריץ שאילתות על נתונים ב-Cloud Storage מסוגי האחסון הבאים:

  • רגילה
  • Nearline
  • Coldline
  • העברה לארכיון

כששולחים שאילתה על נתונים שמאוחסנים ב-Cloud Storage, חשוב להביא בחשבון את המיקום של מערך הנתונים ושל הקטגוריה של Cloud Storage.

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

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

התפקידים הנדרשים

כדי ליצור טבלה חיצונית, צריך את הרשאת bigquery.tables.create לניהול זהויות והרשאות גישה (IAM) ב-BigQuery.

כל אחד מהתפקידים הבאים שמוגדרים מראש בניהול הזהויות והרשאות הגישה (IAM) כולל את ההרשאה הזו:

  • עריכה של נתוני BigQuery‏ (roles/bigquery.dataEditor)
  • בעלי הנתונים ב-BigQuery‏ (roles/bigquery.dataOwner)
  • אדמין ב-BigQuery‏ (roles/bigquery.admin)

כדי לגשת לקטגוריה של Cloud Storage שמכילה את הנתונים, צריך גם את ההרשאות הבאות:

  • storage.buckets.get
  • storage.objects.get
  • ‫storage.objects.list (חובה אם משתמשים בתו כללי לחיפוש ב-URI)

התפקיד המוגדר מראש Storage Admin (roles/storage.admin) ב-Cloud Storage לניהול זהויות והרשאות גישה כולל את ההרשאות האלה.

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

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

היקפי גישה למכונות Compute Engine

אם אתם צריכים לשלוח שאילתה ממכונה של Compute Engine לטבלה חיצונית שמקושרת למקור ב-Cloud Storage, למכונה צריך להיות לפחות היקף גישה לקריאה בלבד ב-Cloud Storage (https://www.googleapis.com/auth/devstorage.read_only).

היקפי ההרשאות שולטים בגישה של המכונה ב-Compute Engine למוצרי Google Cloud, כולל Cloud Storage. אפליקציות שפועלות במכונה משתמשות בחשבון השירות שמצורף למכונה כדי לשלוח קריאות לממשקי ה-API של Google Cloud .

אם מגדירים מכונה של Compute Engine כך שתפעל כחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine, המכונה מקבלת כברירת מחדל מספר היקפי הרשאות שמוגדרים כברירת מחדל, כולל היקף ההרשאות https://www.googleapis.com/auth/devstorage.read_only.

אם הגדרתם את המכונה עם חשבון שירות בהתאמה אישית, ודאו שאתם נותנים למכונה את ההיקף https://www.googleapis.com/auth/devstorage.read_only באופן מפורש.

במאמר שינוי חשבון השירות והיקפי הגישה של מכונה מוסבר איך להחיל היקפי הרשאות על מכונה של Compute Engine. מידע נוסף על חשבונות שירות של Compute Engine זמין במאמר חשבונות שירות.

יצירת טבלאות חיצוניות בנתונים לא מחולקים למחיצות

כדי ליצור טבלה קבועה שמקושרת למקור הנתונים החיצוני:

בוחרים באחת מהאפשרויות הבאות:

המסוף

  1. נכנסים לדף BigQuery.

    כניסה ל-BigQuery

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

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

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

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

  4. מרחיבים את האפשרות Actions ולוחצים על Create table.

  5. בקטע מקור, מציינים את הפרטים הבאים:

    1. בשדה Create table from, בוחרים באפשרות Google Cloud Storage.

    2. בשדה Select file from GCS bucket or use a URI pattern, בוחרים קטגוריה וקובץ לשימוש, או מקלידים את הנתיב בפורמט gs://bucket_name/[folder_name/]file_name.

      אי אפשר לציין כמה מזהי URI במסוף Google Cloud , אבל אפשר לבחור כמה קבצים על ידי ציון תו כללי לחיפוש אחד – כוכבית (*). לדוגמה, gs://mybucket/file_name*. מידע נוסף מופיע במאמר תמיכה בתווים כלליים לחיפוש במזהי URI של Cloud Storage.

      הקטגוריה של Cloud Storage צריכה להיות באותו מיקום שבו נמצא מערך הנתונים שמכיל את הטבלה שאתם יוצרים.

    3. בקטע פורמט קובץ, בוחרים את הפורמט שמתאים לקובץ.

  6. בקטע Destination, מציינים את הפרטים הבאים:

    1. בשדה Project, בוחרים את הפרויקט שבו רוצים ליצור את הטבלה.

    2. בשדה Dataset, בוחרים את מערך הנתונים שבו רוצים ליצור את הטבלה.

    3. בשדה Table, מזינים את שם הטבלה שיוצרים.

    4. בשדה Table type, בוחרים באפשרות External table.

  7. בקטע Schema, אתם יכולים להפעיל את האפשרות schema auto-detection או לציין סכימה באופן ידני אם יש לכם קובץ מקור. אם אין לכם קובץ מקור, אתם צריכים לציין סכימה באופן ידני.

    • כדי להפעיל זיהוי אוטומטי של סכימה, בוחרים באפשרות Auto-detect.

    • כדי לציין סכימה באופן ידני, משאירים את האפשרות Auto-detect לא מסומנת. מפעילים את האפשרות Edit as text ומזינים את סכימת הטבלה כמערך JSON.

  8. כדי להתעלם משורות עם ערכי עמודות נוספים שלא תואמים לסכימה, מרחיבים את הקטע Advanced options ובוחרים באפשרות Unknown values.

  9. לוחצים על Create table.

אחרי שיוצרים את הטבלה הקבועה, אפשר להריץ שאילתה על הטבלה כאילו היא טבלה ב-BigQuery. אחרי שהשאילתה מסתיימת, אפשר לייצא את התוצאות כקובצי CSV או JSON, לשמור את התוצאות כטבלה או לשמור את התוצאות ב-Google Sheets.

SQL

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

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

    כניסה ל-BigQuery

  2. בעורך השאילתות, מזינים את ההצהרה הבאה:

    CREATE EXTERNAL TABLE `PROJECT_ID.DATASET.EXTERNAL_TABLE_NAME`
      OPTIONS (
        format ="TABLE_FORMAT",
        uris = ['BUCKET_PATH'[,...]]
        );

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

    • ‫PROJECT_ID: שם הפרויקט שבו רוצים ליצור את הטבלה, לדוגמה myproject
    • ‫DATASET: השם של מערך הנתונים ב-BigQuery שבו רוצים ליצור את הטבלה, למשל mydataset.
    • ‫EXTERNAL_TABLE_NAME: שם הטבלה שרוצים ליצור, לדוגמה mytable
    • ‫TABLE_FORMAT: הפורמט של הטבלה שרוצים ליצור, לדוגמה PARQUET
    • ‫BUCKET_PATH: הנתיב לקטגוריה של Cloud Storage שמכילה את הנתונים של הטבלה החיצונית, בפורמט ['gs://bucket_name/[folder_name/]file_name'].

      אפשר לבחור כמה קבצים מהקטגוריה על ידי ציון תו כללי אחד של כוכבית (*) בנתיב. לדוגמה, ['gs://mybucket/file_name*']. מידע נוסף זמין במאמר תמיכה בתווים כלליים לחיפוש במזהי URI של Cloud Storage.

      אפשר לציין כמה קטגוריות באפשרות uris על ידי ציון כמה נתיבים.

      בדוגמאות הבאות מוצגים ערכים תקינים של uris:

      • ['gs://bucket/path1/myfile.csv']
      • ['gs://bucket/path1/*.csv']
      • ['gs://bucket/path1/*', 'gs://bucket/path2/file00*']

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

      מידע נוסף על השימוש במזהי URI של Cloud Storage ב-BigQuery זמין במאמר נתיב המשאבים של Cloud Storage.

  3. לוחצים על הפעלה.

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

דוגמאות

בדוגמה הבאה נעשה שימוש בזיהוי אוטומטי של סכימה כדי ליצור טבלה חיצונית בשם sales שמקושרת לקובץ CSV שמאוחסן ב-Cloud Storage:

CREATE OR REPLACE EXTERNAL TABLE mydataset.sales
  OPTIONS (
  format = 'CSV',
  uris = ['gs://mybucket/sales.csv']);

בדוגמה הבאה מצוינת סכימה באופן מפורש, והשורה הראשונה בקובץ ה-CSV נמחקת:

CREATE OR REPLACE EXTERNAL TABLE mydataset.sales (
  Region STRING,
  Quarter STRING,
  Total_Sales INT64
) OPTIONS (
    format = 'CSV',
    uris = ['gs://mybucket/sales.csv'],
    skip_leading_rows = 1);

BQ

כדי ליצור טבלה חיצונית, משתמשים בפקודה bq mk עם הדגל --external_table_definition. הדגל הזה מכיל נתיב לקובץ הגדרת טבלה או הגדרת טבלה מוטבעת.

אפשרות 1: קובץ הגדרת טבלה

משתמשים בפקודה bq mkdef כדי ליצור קובץ הגדרת טבלה, ואז מעבירים את נתיב הקובץ לפקודה bq mk באופן הבא:

bq mkdef --source_format=SOURCE_FORMAT \
  BUCKET_PATH > DEFINITION_FILE

bq mk --table \
  --external_table_definition=DEFINITION_FILE \
  DATASET_NAME.TABLE_NAME \
  SCHEMA

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

  • ‫SOURCE_FORMAT: הפורמט של מקור הנתונים החיצוני. לדוגמה, CSV.
  • ‫BUCKET_PATH: הנתיב לקטגוריה של Cloud Storage שמכילה את הנתונים של הטבלה, בפורמט gs://bucket_name/[folder_name/]file_pattern.

    אפשר לבחור כמה קבצים מהקטגוריה על ידי ציון תו כללי אחד של כוכבית (*) ב-file_pattern. לדוגמה, gs://mybucket/file00*.parquet. מידע נוסף מופיע במאמר תמיכה בתווים כלליים לחיפוש במזהי URI של Cloud Storage.

    אפשר לציין כמה קטגוריות לאפשרות uris על ידי ציון כמה נתיבים.

    בדוגמאות הבאות מוצגים ערכים תקינים של uris:

    • gs://bucket/path1/myfile.csv
    • gs://bucket/path1/*.parquet
    • gs://bucket/path1/file1*, gs://bucket1/path1/*

    כשמציינים ערכי uris שמטרגטים כמה קבצים, לכל הקבצים האלה צריכה להיות סכימה תואמת.

    מידע נוסף על השימוש במזהי URI של Cloud Storage ב-BigQuery זמין במאמר נתיב המשאבים של Cloud Storage.

  • ‫DEFINITION_FILE: הנתיב לקובץ הגדרת הטבלה במחשב המקומי.

  • ‫DATASET_NAME: שם מערך הנתונים שמכיל את הטבלה.

  • ‫TABLE_NAME: שם הטבלה שיוצרים.

  • ‫SCHEMA: מציין נתיב לקובץ סכימת JSON, או מציין את הסכימה בפורמט field:data_type,field:data_type,....

דוגמה:

bq mkdef --source_format=CSV gs://mybucket/sales.csv > mytable_def

bq mk --table --external_table_definition=mytable_def \
  mydataset.mytable \
  Region:STRING,Quarter:STRING,Total_sales:INTEGER

כדי להשתמש בזיהוי אוטומטי של סכימה, מגדירים את הדגל --autodetect=true בפקודה mkdef ומשמיטים את הסכימה:

bq mkdef --source_format=CSV --autodetect=true \
  gs://mybucket/sales.csv > mytable_def

bq mk --table --external_table_definition=mytable_def \
  mydataset.mytable

אפשרות 2: הגדרת טבלה מוטבעת

במקום ליצור קובץ הגדרת טבלה, אתם יכולים להעביר את הגדרת הטבלה ישירות לפקודה bq mk:

bq mk --table \
  --external_table_definition=@SOURCE_FORMAT=BUCKET_PATH \
  DATASET_NAME.TABLE_NAME \
  SCHEMA

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

  • ‫SOURCE_FORMAT: הפורמט של מקור הנתונים החיצוני

    לדוגמה, CSV.

  • ‫BUCKET_PATH: הנתיב לקטגוריה של Cloud Storage שמכילה את הנתונים של הטבלה, בפורמט gs://bucket_name/[folder_name/]file_pattern.

    אפשר לבחור כמה קבצים מהקטגוריה על ידי ציון תו כללי אחד של כוכבית (*) ב-file_pattern. לדוגמה, gs://mybucket/file00*.parquet. מידע נוסף מופיע במאמר תמיכה בתווים כלליים לחיפוש במזהי URI של Cloud Storage.

    אפשר לציין כמה קטגוריות לאפשרות uris על ידי ציון כמה נתיבים.

    בדוגמאות הבאות מוצגים ערכים תקינים של uris:

    • gs://bucket/path1/myfile.csv
    • gs://bucket/path1/*.parquet
    • gs://bucket/path1/file1*, gs://bucket1/path1/*

    כשמציינים ערכי uris שמטרגטים כמה קבצים, לכל הקבצים האלה צריכה להיות סכימה תואמת.

    מידע נוסף על השימוש במזהי URI של Cloud Storage ב-BigQuery זמין במאמר נתיב המשאבים של Cloud Storage.

  • ‫DATASET_NAME: שם מערך הנתונים שמכיל את הטבלה.

  • ‫TABLE_NAME: שם הטבלה שיוצרים.

  • ‫SCHEMA: מציין נתיב לקובץ סכימת JSON, או מציין את הסכימה בפורמט field:data_type,field:data_type,.... כדי להשתמש בזיהוי אוטומטי של סכימה, משמיטים את הארגומנט הזה.

דוגמה:

bq mkdef --source_format=CSV gs://mybucket/sales.csv > mytable_def
bq mk --table --external_table_definition=mytable_def \
  mydataset.mytable \
  Region:STRING,Quarter:STRING,Total_sales:INTEGER

API

מפעילים את ה-method‏ tables.insert ב-API ויוצרים ExternalDataConfiguration במשאב Table שמעבירים.

כדי להפעיל זיהוי אוטומטי של סכימה במקורות נתונים נתמכים, מציינים את המאפיין schema או מגדירים את המאפיין autodetect כ-true.

Java

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

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

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.CsvOptions;
import com.google.cloud.bigquery.ExternalTableDefinition;
import com.google.cloud.bigquery.Field;
import com.google.cloud.bigquery.QueryJobConfiguration;
import com.google.cloud.bigquery.Schema;
import com.google.cloud.bigquery.StandardSQLTypeName;
import com.google.cloud.bigquery.TableId;
import com.google.cloud.bigquery.TableInfo;
import com.google.cloud.bigquery.TableResult;

// Sample to queries an external data source using a permanent table
public class QueryExternalGCSPerm {

  public static void runQueryExternalGCSPerm() {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    String tableName = "MY_TABLE_NAME";
    String sourceUri = "gs://cloud-samples-data/bigquery/us-states/us-states.csv";
    Schema schema =
        Schema.of(
            Field.of("name", StandardSQLTypeName.STRING),
            Field.of("post_abbr", StandardSQLTypeName.STRING));
    String query =
        String.format("SELECT * FROM %s.%s WHERE name LIKE 'W%%'", datasetName, tableName);
    queryExternalGCSPerm(datasetName, tableName, sourceUri, schema, query);
  }

  public static void queryExternalGCSPerm(
      String datasetName, String tableName, String sourceUri, Schema schema, String query) {
    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();

      // Skip header row in the file.
      CsvOptions csvOptions = CsvOptions.newBuilder().setSkipLeadingRows(1).build();

      TableId tableId = TableId.of(datasetName, tableName);
      // Create a permanent table linked to the GCS file
      ExternalTableDefinition externalTable =
          ExternalTableDefinition.newBuilder(sourceUri, csvOptions).setSchema(schema).build();
      bigquery.create(TableInfo.of(tableId, externalTable));

      // Example query to find states starting with 'W'
      TableResult results = bigquery.query(QueryJobConfiguration.of(query));

      results
          .iterateAll()
          .forEach(row -> row.forEach(val -> System.out.printf("%s,", val.toString())));

      System.out.println("Query on external permanent table performed successfully.");
    } catch (BigQueryException | InterruptedException e) {
      System.out.println("Query not performed \n" + e.toString());
    }
  }
}

Node.js

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

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

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

async function queryExternalGCSPerm() {
  // Queries an external data source using a permanent table

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

  // Configure the external data source
  const dataConfig = {
    sourceFormat: 'CSV',
    sourceUris: ['gs://cloud-samples-data/bigquery/us-states/us-states.csv'],
    // Optionally skip header row
    csvOptions: {skipLeadingRows: 1},
  };

  // For all options, see https://cloud.google.com/bigquery/docs/reference/v2/tables#resource
  const options = {
    schema: schema,
    externalDataConfiguration: dataConfig,
  };

  // Create an external table linked to the GCS file
  const [table] = await bigquery
    .dataset(datasetId)
    .createTable(tableId, options);

  console.log(`Table ${table.id} created.`);

  // Example query to find states starting with 'W'
  const query = `SELECT post_abbr
  FROM \`${datasetId}.${tableId}\`
  WHERE name LIKE 'W%'`;

  // Run the query as a job
  const [job] = await bigquery.createQueryJob(query);
  console.log(`Job ${job.id} started.`);

  // Wait for the query to finish
  const [rows] = await job.getQueryResults();

  // Print the results
  console.log('Rows:');
  console.log(rows);
}

Python

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

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

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 create.
table_id = "your-project.your_dataset.your_table_name"

# TODO(developer): Set the external source format of your table.
# Note that the set of allowed values for external data sources is
# different than the set used for loading data (see :class:`~google.cloud.bigquery.job.SourceFormat`).
external_source_format = "AVRO"

# TODO(developer): Set the source_uris to point to your data in Google Cloud
source_uris = [
    "gs://cloud-samples-data/bigquery/federated-formats-reference-file-schema/a-twitter.avro",
    "gs://cloud-samples-data/bigquery/federated-formats-reference-file-schema/b-twitter.avro",
    "gs://cloud-samples-data/bigquery/federated-formats-reference-file-schema/c-twitter.avro",
]

# Create ExternalConfig object with external source format
external_config = bigquery.ExternalConfig(external_source_format)
# Set source_uris that point to your data in Google Cloud
external_config.source_uris = source_uris

# TODO(developer) You have the option to set a reference_file_schema_uri, which points to
# a reference file for the table schema
reference_file_schema_uri = "gs://cloud-samples-data/bigquery/federated-formats-reference-file-schema/b-twitter.avro"

external_config.reference_file_schema_uri = reference_file_schema_uri

table = bigquery.Table(table_id)
# Set the external data configuration of the table
table.external_data_configuration = external_config
table = client.create_table(table)  # Make an API request.

print(
    f"Created table with external source format {table.external_data_configuration.source_format}"
)

יצירת טבלאות חיצוניות בנתונים מחולקים למחיצות

אתם יכולים ליצור טבלה חיצונית לנתונים שחולקו למחיצות ב-Hive ונמצאים ב-Cloud Storage. אחרי שיוצרים טבלה מחולקת למחיצות חיצוניות, אי אפשר לשנות את מפתח המחיצה. כדי לשנות את מפתח המחיצה, צריך ליצור מחדש את הטבלה.

כדי ליצור טבלה חיצונית לנתונים שחולקו למחיצות ב-Hive, בוחרים באחת מהאפשרויות הבאות:

המסוף

  1. במסוף Google Cloud , נכנסים ל-BigQuery.

    כניסה לדף BigQuery

  2. בחלונית הימנית, לוחצים על Explorer.
  3. בחלונית Explorer, מרחיבים את הפרויקט, לוחצים על Datasets ובוחרים מערך נתונים.
  4. לוחצים על Actions ואז על Create table. החלונית Create table תיפתח.
  5. בקטע מקור, מציינים את הפרטים הבאים:
    1. בקטע Create table from, בוחרים באפשרות Google Cloud Storage.
    2. בשדה Select file from Cloud Storage bucket, מזינים את הנתיב לתיקייה ב-Cloud Storage באמצעות תווים כלליים לחיפוש. לדוגמה, my_bucket/my_files*. הקטגוריה של Cloud Storage צריכה להיות באותו מיקום כמו מערך הנתונים שמכיל את הטבלה שרוצים ליצור, להוסיף לה או להחליף אותה.
    3. ברשימה פורמט קובץ, בוחרים את סוג הקובץ.
    4. מסמנים את התיבה Source data partitioning, ובשדה Select Source URI Prefix מזינים את הקידומת של ה-URI של Cloud Storage. לדוגמה, gs://my_bucket/my_files.
    5. בקטע מצב היסק של מחיצה, בוחרים אחת מהאפשרויות הבאות:
      • Automatically infer types: מגדירים את מצב הזיהוי של סכימת המחיצה ל-AUTO.
      • כל העמודות הן מחרוזות: מגדירים את מצב הזיהוי של סכימת המחיצה לערך STRINGS.
      • Provide my own: מגדירים את מצב הזיהוי של סכימת המחיצה לערך CUSTOM ומזינים באופן ידני את פרטי הסכימה של מפתחות המחיצה. מידע נוסף מופיע במאמר הגדרת סכימה מותאמת אישית למפתח המחיצה.
    6. אופציונלי: כדי לדרוש מסנן מחיצה בכל השאילתות בטבלה הזו, מסמנים את התיבה Require partition filter. דרישה למסנן מחיצות יכולה להפחית את העלות ולשפר את הביצועים. מידע נוסף זמין במאמר דרישה למסנני פרדיקטים במפתחות מחיצה בשאילתות.
  6. בקטע Destination, מציינים את הפרטים הבאים:
    1. בשדה Project, בוחרים את הפרויקט שבו רוצים ליצור את הטבלה.
    2. בשדה Dataset, בוחרים את מערך הנתונים שבו רוצים ליצור את הטבלה.
    3. בשדה Table, מזינים את שם הטבלה שרוצים ליצור.
    4. בשדה Table type, בוחרים באפשרות External table.
  7. בקטע Schema, מזינים את הגדרת הסכימה.
  8. כדי להפעיל זיהוי אוטומטי של סכימה, בוחרים באפשרות Auto detect.
  9. כדי להתעלם משורות עם ערכי עמודות נוספים שלא תואמים לסכימה, מרחיבים את הקטע Advanced options ובוחרים באפשרות Unknown values.
  10. לוחצים על Create table.

SQL

משתמשים בהצהרת ה-DDL‏ CREATE EXTERNAL TABLE.

בדוגמה הבאה נעשה שימוש בזיהוי אוטומטי של מפתחות חלוקה למחיצות של Hive:

CREATE EXTERNAL TABLE `PROJECT_ID.DATASET.EXTERNAL_TABLE_NAME`
WITH PARTITION COLUMNS
OPTIONS (
format = 'SOURCE_FORMAT',
uris = ['GCS_URIS'],
hive_partition_uri_prefix = 'GCS_URI_SHARED_PREFIX',
require_hive_partition_filter = BOOLEAN);

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

  • ‫SOURCE_FORMAT: הפורמט של מקור הנתונים החיצוני, למשל PARQUET
  • ‫GCS_URIS: הנתיב לתיקייה ב-Cloud Storage, בפורמט של תו כללי לחיפוש
  • ‫GCS_URI_SHARED_PREFIX: הקידומת של ה-URI במקור, בלי התו הכללי לחיפוש
  • ‫BOOLEAN: האם לדרוש מסנן פרדיקט בזמן השאילתה. הדגל הזה הוא אופציונלי. ערך ברירת המחדל הוא false.

בדוגמה הבאה נעשה שימוש במפתחות ובסוגים של מחיצות Hive בהתאמה אישית, על ידי רישום שלהם בסעיף WITH PARTITION COLUMNS:

CREATE EXTERNAL TABLE `PROJECT_ID.DATASET.EXTERNAL_TABLE_NAME`
WITH PARTITION COLUMNS (PARTITION_COLUMN_LIST)
OPTIONS (
format = 'SOURCE_FORMAT',
uris = ['GCS_URIS'],
hive_partition_uri_prefix = 'GCS_URI_SHARED_PREFIX',
require_hive_partition_filter = BOOLEAN);

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

  • ‫PARTITION_COLUMN_LIST: רשימת עמודות לפי אותו סדר בנתיב של התיקייה ב-Cloud Storage, בפורמט הבא:
KEY1 TYPE1, KEY2 TYPE2

בדוגמה הבאה נוצרת טבלה מחולקת למחיצות חיצוניות. הוא משתמש בזיהוי אוטומטי של סכימה כדי לזהות גם את סכימת הקובץ וגם את פריסת החלוקה למחיצות של Hive. אם הנתיב החיצוני הוא gs://bucket/path/field_1=first/field_2=1/data.parquet, עמודות המחיצה מזוהות בתור field_1 (STRING) ו-field_2 (INT64).

CREATE EXTERNAL TABLE dataset.AutoHivePartitionedTable
WITH PARTITION COLUMNS
OPTIONS (
uris = ['gs://bucket/path/*'],
format = 'PARQUET',
hive_partition_uri_prefix = 'gs://bucket/path',
require_hive_partition_filter = false);

בדוגמה הבאה נוצרת טבלה עם חלוקה למחיצות חיצונית, על ידי ציון מפורש של עמודות המחיצה. בדוגמה הזו, ההנחה היא שנתיב הקובץ החיצוני הוא בתבנית gs://bucket/path/field_1=first/field_2=1/data.parquet.

CREATE EXTERNAL TABLE dataset.CustomHivePartitionedTable
WITH PARTITION COLUMNS (
field_1 STRING, -- column order must match the external path
field_2 INT64)
OPTIONS (
uris = ['gs://bucket/path/*'],
format = 'PARQUET',
hive_partition_uri_prefix = 'gs://bucket/path',
require_hive_partition_filter = false);

BQ

קודם כל, משתמשים בפקודה bq mkdef כדי ליצור קובץ הגדרת טבלה:

bq mkdef \
--source_format=SOURCE_FORMAT \
--hive_partitioning_mode=PARTITIONING_MODE \
--hive_partitioning_source_uri_prefix=GCS_URI_SHARED_PREFIX \
--require_hive_partition_filter=BOOLEAN \
 GCS_URIS > DEFINITION_FILE

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

  • ‫SOURCE_FORMAT: הפורמט של מקור הנתונים החיצוני. לדוגמה, CSV.
  • ‫PARTITIONING_MODE: מצב החלוקה למחיצות של Hive. משתמשים באחד מהערכים הבאים:
    • ‫AUTO: זיהוי אוטומטי של השמות והסוגים של המפתחות.
    • ‫STRINGS: המרה אוטומטית של שמות המפתחות למחרוזות.
    • ‫CUSTOM: מקודדים את סכימת המפתח בקידומת של ה-URI במקור.
  • ‫GCS_URI_SHARED_PREFIX: הקידומת של ה-URI במקור.
  • ‫BOOLEAN: מציין אם לדרוש מסנן פרדיקט בזמן השאילתה. הדגל הזה הוא אופציונלי. ערך ברירת המחדל הוא false.
  • ‫GCS_URIS: הנתיב לתיקייה ב-Cloud Storage, בפורמט של תו כללי לחיפוש.
  • ‫DEFINITION_FILE: הנתיב לקובץ הגדרת הטבלה במחשב המקומי.

אם הערך של PARTITIONING_MODE הוא CUSTOM, צריך לכלול את סכימת מפתח המחיצה בקידומת של ה-URI של המקור, בפורמט הבא:

--hive_partitioning_source_uri_prefix=GCS_URI_SHARED_PREFIX/{KEY1:TYPE1}/{KEY2:TYPE2}/...

אחרי שיוצרים את קובץ הגדרת הטבלה, משתמשים בפקודה bq mk כדי ליצור את הטבלה החיצונית:

bq mk --external_table_definition=DEFINITION_FILE \
DATASET_NAME.TABLE_NAME \
SCHEMA

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

  • ‫DEFINITION_FILE: הנתיב לקובץ הגדרת הטבלה.
  • ‫DATASET_NAME: שם מערך הנתונים שמכיל את הטבלה.
  • ‫TABLE_NAME: שם הטבלה שיוצרים.
  • ‫SCHEMA: מציין נתיב לקובץ סכימת JSON, או מציין את הסכימה בפורמט field:data_type,field:data_type,.... כדי להשתמש בזיהוי אוטומטי של סכימה, משמיטים את הארגומנט הזה.

דוגמאות

בדוגמה הבאה נעשה שימוש במצב החלוקה למחיצות AUTO של Hive:

bq mkdef --source_format=CSV \
  --hive_partitioning_mode=AUTO \
  --hive_partitioning_source_uri_prefix=gs://myBucket/myTable \
  gs://myBucket/myTable/* > mytable_def

bq mk --external_table_definition=mytable_def \
  mydataset.mytable \
  Region:STRING,Quarter:STRING,Total_sales:INTEGER

בדוגמה הבאה נעשה שימוש במצב החלוקה למחיצות STRING של Hive:

bq mkdef --source_format=CSV \
  --hive_partitioning_mode=STRING \
  --hive_partitioning_source_uri_prefix=gs://myBucket/myTable \
  gs://myBucket/myTable/* > mytable_def

bq mk --external_table_definition=mytable_def \
  mydataset.mytable \
  Region:STRING,Quarter:STRING,Total_sales:INTEGER

בדוגמה הבאה נעשה שימוש במצב החלוקה למחיצות CUSTOM של Hive:

bq mkdef --source_format=CSV \
  --hive_partitioning_mode=CUSTOM \
  --hive_partitioning_source_uri_prefix=gs://myBucket/myTable/{dt:DATE}/{val:STRING} \
  gs://myBucket/myTable/* > mytable_def

bq mk --external_table_definition=mytable_def \
  mydataset.mytable \
  Region:STRING,Quarter:STRING,Total_sales:INTEGER

API

כדי להגדיר חלוקה למחיצות ב-Hive באמצעות BigQuery API, צריך לכלול אובייקט hivePartitioningOptions באובייקט ExternalDataConfiguration כשיוצרים את קובץ הגדרת הטבלה.

אם מגדירים את השדה hivePartitioningOptions.mode לערך CUSTOM, צריך לקודד את הסכימה של מפתח המחיצה בשדה hivePartitioningOptions.sourceUriPrefix באופן הבא: gs://BUCKET/PATH_TO_TABLE/{KEY1:TYPE1}/{KEY2:TYPE2}/...

כדי לאכוף את השימוש במסנן פרדיקט בזמן השאילתה, מגדירים את השדה hivePartitioningOptions.requirePartitionFilter לערך true.

Java

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

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

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.ExternalTableDefinition;
import com.google.cloud.bigquery.FormatOptions;
import com.google.cloud.bigquery.HivePartitioningOptions;
import com.google.cloud.bigquery.TableId;
import com.google.cloud.bigquery.TableInfo;

// Sample to create external table using hive partitioning
public class SetHivePartitioningOptions {

  public static void main(String[] args) {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    String tableName = "MY_TABLE_NAME";
    String sourceUri = "gs://cloud-samples-data/bigquery/hive-partitioning-samples/customlayout/*";
    String sourceUriPrefix =
        "gs://cloud-samples-data/bigquery/hive-partitioning-samples/customlayout/{pkey:STRING}/";
    setHivePartitioningOptions(datasetName, tableName, sourceUriPrefix, sourceUri);
  }

  public static void setHivePartitioningOptions(
      String datasetName, String tableName, String sourceUriPrefix, String sourceUri) {
    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();

      // Configuring partitioning options
      HivePartitioningOptions hivePartitioningOptions =
          HivePartitioningOptions.newBuilder()
              .setMode("CUSTOM")
              .setRequirePartitionFilter(true)
              .setSourceUriPrefix(sourceUriPrefix)
              .build();

      TableId tableId = TableId.of(datasetName, tableName);
      ExternalTableDefinition customTable =
          ExternalTableDefinition.newBuilder(sourceUri, FormatOptions.parquet())
              .setAutodetect(true)
              .setHivePartitioningOptions(hivePartitioningOptions)
              .build();
      bigquery.create(TableInfo.of(tableId, customTable));
      System.out.println("External table created using hivepartitioningoptions");
    } catch (BigQueryException e) {
      System.out.println("External table was not created" + e.toString());
    }
  }
}

הרצת שאילתות על טבלאות חיצוניות

מידע נוסף זמין במאמר שליחת שאילתות על נתוני Cloud Storage בטבלאות חיצוניות.

שדרוג טבלאות חיצוניות ל-BigLake

כדי לשדרג טבלאות שמבוססות על Cloud Storage לטבלאות BigLake, צריך לשייך את הטבלה החיצונית לחיבור. אם אתם רוצים להשתמש בשמירת מטא-נתונים במטמון בטבלת BigLake, אתם יכולים לציין את ההגדרות לכך באותו הזמן. במאמר קבלת מידע על טבלאות מוסבר איך לקבל פרטים על טבלאות, כמו פורמט המקור ו-URI של המקור.

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

SQL

כדי לעדכן טבלה, משתמשים בהצהרת ה-DDL של CREATE OR REPLACE EXTERNAL TABLE:

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

    כניסה ל-BigQuery

  2. בעורך השאילתות, מזינים את ההצהרה הבאה:

    CREATE OR REPLACE EXTERNAL TABLE
      `PROJECT_ID.DATASET.EXTERNAL_TABLE_NAME`
      WITH CONNECTION {`REGION.CONNECTION_ID` | DEFAULT}
      OPTIONS(
        format ="TABLE_FORMAT",
        uris = ['BUCKET_PATH'],
        max_staleness = STALENESS_INTERVAL,
        metadata_cache_mode = 'CACHE_MODE'
        );

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

    • ‫PROJECT_ID: שם הפרויקט שמכיל את הטבלה
    • ‫DATASET: שם קבוצת הנתונים שמכילה את הטבלה
    • ‫EXTERNAL_TABLE_NAME: שם הטבלה
    • ‫REGION: האזור שבו נמצא החיבור
    • ‫CONNECTION_ID: שם החיבור שבו רוצים להשתמש

      כדי להשתמש ב חיבור שמוגדר כברירת מחדל, מציינים את DEFAULT במקום את מחרוזת החיבור שמכילה את REGION.CONNECTION_ID.

    • TABLE_FORMAT: הפורמט של הטבלה

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

    • ‫BUCKET_PATH: הנתיב לקטגוריה של Cloud Storage שמכילה את הנתונים של הטבלה החיצונית, בפורמט ['gs://bucket_name/[folder_name/]file_name'].

      כדי לבחור כמה קבצים מהקטגוריה, אפשר לציין תו כללי לחיפוש של כוכבית אחת (*) בנתיב. לדוגמה, ['gs://mybucket/file_name*']. מידע נוסף מופיע במאמר תמיכה בתווים כלליים לחיפוש במזהי URI של Cloud Storage.

      אפשר לציין כמה קטגוריות באפשרות uris על ידי ציון כמה נתיבים.

      בדוגמאות הבאות מוצגים ערכים תקינים של uris:

      • ['gs://bucket/path1/myfile.csv']
      • ['gs://bucket/path1/*.csv']
      • ['gs://bucket/path1/*', 'gs://bucket/path2/file00*']

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

      מידע נוסף על השימוש במזהי URI של Cloud Storage ב-BigQuery זמין במאמר נתיב המשאבים של Cloud Storage.

    • ‫STALENESS_INTERVAL: מציין אם המטא-נתונים שנשמרו במטמון משמשים לפעולות בטבלה, ועד כמה המטא-נתונים שנשמרו במטמון צריכים להיות עדכניים כדי שהפעולה תשתמש בהם

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

      כדי להשבית את השמירה של המטא-נתונים במטמון, מציינים את הערך 0. (זוהי ברירת המחדל)

      כדי להפעיל שמירת מטא-נתונים במטמון, מציינים ערך של ליטרל מרווח בין 30 דקות ל-7 ימים. לדוגמה, מציינים INTERVAL 4 HOUR למרווח זמן של 4 שעות. עם הערך הזה, פעולות בטבלה משתמשות במטא-נתונים שנשמרו במטמון אם הם רועננו ב-4 השעות האחרונות. אם המטא-נתונים במטמון ישנים יותר, הפעולה מאחזרת מטא-נתונים מ-Cloud Storage.

    • ‫CACHE_MODE: מציין אם המטמון של המטא-נתונים מתרענן באופן אוטומטי או ידני

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

      מגדירים את הערך AUTOMATIC כדי לרענן את המטמון של המטא-נתונים במרווח זמן שמוגדר על ידי המערכת, בדרך כלל בין 30 ל-60 דקות.

      מגדירים את הערך MANUAL אם רוצים לרענן את המטמון של המטא-נתונים לפי לוח זמנים שאתם קובעים. במקרה כזה, אפשר להפעיל את הפרוצדורה של המערכת BQ.REFRESH_EXTERNAL_METADATA_CACHE כדי לרענן את המטמון.

      צריך להגדיר את CACHE_MODE אם הערך של STALENESS_INTERVAL גדול מ-0.

  3. לוחצים על הפעלה.

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

BQ

כדי לעדכן טבלה, משתמשים בפקודות bq mkdef ו-bq update:

  1. יוצרים הגדרה של טבלה חיצונית שמתארת את ההיבטים של הטבלה שרוצים לשנות:

    bq mkdef --connection_id=PROJECT_ID.REGION.CONNECTION_ID \
    --source_format=TABLE_FORMAT \
    --metadata_cache_mode=CACHE_MODE \
    "BUCKET_PATH" > /tmp/DEFINITION_FILE

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

    • ‫PROJECT_ID: שם הפרויקט שמכיל את החיבור
    • ‫REGION: האזור שבו נמצא החיבור
    • ‫CONNECTION_ID: שם החיבור שבו רוצים להשתמש
    • ‫TABLE_FORMAT: הפורמט שבו משתמשים בטבלה. אי אפשר לשנות את זה כשמעדכנים את הטבלה.
    • ‫CACHE_MODE: קובע אם המטמון של המטא-נתונים מתרענן באופן אוטומטי או ידני. למידע נוסף על שיקולים לשמירת מטא-נתונים במטמון, ראו שמירת מטא-נתונים במטמון לשיפור הביצועים.

      מגדירים את הערך AUTOMATIC כדי לרענן את המטמון של המטא-נתונים במרווח זמן שמוגדר במערכת, בדרך כלל בין 30 ל-60 דקות.

      מגדירים את הערך MANUAL אם רוצים לרענן את המטמון של המטא-נתונים לפי לוח זמנים שאתם קובעים. במקרה כזה, אתם יכולים להפעיל את הפרוצדורה של המערכת BQ.REFRESH_EXTERNAL_METADATA_CACHE כדי לרענן את המטמון.

      צריך להגדיר את CACHE_MODE אם הערך של STALENESS_INTERVAL גדול מ-0.

    • ‫BUCKET_PATH: הנתיב לקטגוריה של Cloud Storage שמכילה את הנתונים של הטבלה החיצונית, בפורמט gs://bucket_name/[folder_name/]file_name.

      כדי להגביל את הקבצים שנבחרו מהקטגוריה, אפשר לציין תו כללי לחיפוש של כוכבית אחת (*) בנתיב. לדוגמה, gs://mybucket/file_name*. מידע נוסף מופיע במאמר תמיכה בתווים כלליים לחיפוש במזהי URI של Cloud Storage.

      אפשר לציין כמה קטגוריות לאפשרות uris על ידי ציון כמה נתיבים.

      בדוגמאות הבאות מוצגים ערכים תקינים של uris:

      • gs://bucket/path1/myfile.csv
      • gs://bucket/path1/*.csv
      • gs://bucket/path1/*,gs://bucket/path2/file00*

      כשמציינים ערכי uris שמטרגטים כמה קבצים, לכל הקבצים האלה צריכה להיות סכימה תואמת.

      מידע נוסף על השימוש במזהי URI של Cloud Storage ב-BigQuery זמין במאמר נתיב המשאבים של Cloud Storage.

    • ‫DEFINITION_FILE: השם של קובץ הגדרת הטבלה שאתם יוצרים.

  2. מעדכנים את הטבלה באמצעות ההגדרה החדשה של הטבלה החיצונית:

    bq update --max_staleness=STALENESS_INTERVAL \
    --external_table_definition=/tmp/DEFINITION_FILE \
    PROJECT_ID:DATASET.EXTERNAL_TABLE_NAME

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

    • ‫STALENESS_INTERVAL: מציין אם המטא-נתונים שנשמרו במטמון משמשים לפעולות בטבלה, ועד כמה המטא-נתונים שנשמרו במטמון צריכים להיות עדכניים כדי שהפעולה תשתמש בהם. למידע נוסף על שיקולים לשמירת מטא-נתונים במטמון, ראו שמירת מטא-נתונים במטמון לשיפור הביצועים.

      כדי להשבית את השמירה של המטא-נתונים במטמון, מציינים את הערך 0. (זוהי ברירת המחדל)

      כדי להפעיל את שמירת המטא-נתונים במטמון, מציינים ערך מרווח בין 30 דקות ל-7 ימים, בפורמט Y-M D H:M:S שמתואר במסמכי התיעוד של סוג הנתונים INTERVAL. לדוגמה, מציינים 0-0 0 4:0:0 למרווח זמן של 4 שעות. עם הערך הזה, פעולות בטבלה משתמשות במטא-נתונים שנשמרו במטמון אם הם רועננו ב-4 השעות האחרונות. אם המטא-נתונים במטמון ישנים יותר, הפעולה מאחזרת את המטא-נתונים מ-Cloud Storage.

    • ‫DEFINITION_FILE: השם של קובץ הגדרת הטבלה שיצרתם או עדכנתם.

    • ‫PROJECT_ID: שם הפרויקט שמכיל את הטבלה

    • ‫DATASET: שם מערך הנתונים שמכיל את הטבלה

    • ‫EXTERNAL_TABLE_NAME: שם הטבלה

נתיב המשאב ב-Cloud Storage

כשיוצרים טבלה חיצונית שמבוססת על מקור נתונים ב-Cloud Storage, צריך לציין את הנתיב לנתונים.

נתיב המשאב ב-Cloud Storage מכיל את שם הקטגוריה ואת האובייקט (שם הקובץ). לדוגמה, אם הקטגוריה של Cloud Storage נקראת mybucket וקובץ הנתונים נקרא myfile.csv, הנתיב למשאב יהיה gs://mybucket/myfile.csv.

‫BigQuery לא תומך בנתיבי משאבים של Cloud Storage שכוללים כמה קווים נטויים ברצף אחרי הקו הנטוי הכפול הראשוני. שמות של אובייקטים ב-Cloud Storage יכולים להכיל כמה תווים של לוכסן ("/") ברצף. עם זאת, BigQuery ממיר כמה לוכסנים עוקבים ללוכסן אחד. לדוגמה, נתיב המשאב הבא תקין ב-Cloud Storage, אבל לא עובד ב-BigQuery: gs://bucket/my//object//name.

כדי לאחזר את נתיב המשאב ב-Cloud Storage:

  1. פותחים את מסוף Cloud Storage.

    מסוף Cloud Storage

  2. עוברים למיקום של האובייקט (הקובץ) שמכיל את נתוני המקור.

  3. לוחצים על שם האובייקט.

    הדף Object details נפתח.

  4. מעתיקים את הערך שמופיע בשדה gsutil URI, שמתחיל ב-gs://.

תמיכה בתווים כלליים לחיפוש במזהי URI של Cloud Storage

אם הנתונים מפוצלים לכמה קבצים, אפשר להשתמש בתו הכללי כוכבית (*) כדי לבחור כמה קבצים. השימוש בתו הכללי לחיפוש כוכבית חייב לעמוד בכללים הבאים:

  • הכוכבית יכולה להופיע בתוך שם האובייקט או בסוף שם האובייקט.
  • אין תמיכה בשימוש בכמה כוכביות. לדוגמה, הנתיב gs://mybucket/fed-*/temp/*.csv לא תקין.
  • אי אפשר להשתמש בכוכבית בשם הקטגוריה.

דוגמאות:

  • בדוגמה הבאה אפשר לראות איך בוחרים את כל הקבצים בכל התיקיות שמתחילות בקידומת gs://mybucket/fed-samples/fed-sample:

    gs://mybucket/fed-samples/fed-sample*
    
  • בדוגמה הבאה אפשר לראות איך לבחור רק קבצים עם הסיומת .csv בתיקייה בשם fed-samples ובכל תיקיות המשנה של fed-samples:

    gs://mybucket/fed-samples/*.csv
    
  • בדוגמה הבאה אפשר לראות איך בוחרים קבצים עם תבנית השם fed-sample*.csv בתיקייה שנקראת fed-samples. בדוגמה הזו לא נבחרים קבצים בתיקיות המשנה של fed-samples.

    gs://mybucket/fed-samples/fed-sample*.csv
    

כשמשתמשים בכלי שורת הפקודה של BigQuery, יכול להיות שתצטרכו להוסיף תו בריחה (escape) לכוכבית בפלטפורמות מסוימות.

אי אפשר להשתמש בתו הכללי לחיפוש כוכבית כשיוצרים טבלאות חיצוניות שמקושרות לייצוא של Datastore או Firestore.

תמחור

העמלות הבאות על אחזור והעברת נתונים ב-Cloud Storage חלות על בקשות ב-BigQuery:

מגבלות

מידע על המגבלות שחלות על טבלאות חיצוניות זמין במאמר מגבלות של טבלאות חיצוניות.

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