将单个源表复制到给定目标。
包含此代码示例的文档页面
如需查看上下文中使用的代码示例,请参阅以下文档:
代码示例
C#
在尝试此示例之前,请按照《BigQuery 快速入门:使用客户端库》中的 C# 设置说明进行操作。如需了解详情,请参阅 BigQuery C# API 参考文档。
using Google.Apis.Bigquery.v2.Data;
using Google.Cloud.BigQuery.V2;
using System;
public class BigQueryCopyTable
{
public void CopyTable(
string projectId = "your-project-id",
string destinationDatasetId = "your_dataset_id"
)
{
BigQueryClient client = BigQueryClient.Create(projectId);
TableReference sourceTableRef = new TableReference()
{
TableId = "shakespeare",
DatasetId = "samples",
ProjectId = "bigquery-public-data"
};
TableReference destinationTableRef = client.GetTableReference(
destinationDatasetId, "destination_table");
BigQueryJob job = client.CreateCopyJob(
sourceTableRef, destinationTableRef)
.PollUntilCompleted() // Wait for the job to complete.
.ThrowOnAnyError();
// Retrieve destination table
BigQueryTable destinationTable = client.GetTable(destinationTableRef);
Console.WriteLine(
$"Copied {destinationTable.Resource.NumRows} rows from table "
+ $"{sourceTableRef.DatasetId}.{sourceTableRef.TableId} "
+ $"to {destinationTable.FullyQualifiedId}."
);
}
}
Go
在尝试此示例之前,请按照《BigQuery 快速入门:使用客户端库》中的 Go 设置说明进行操作。如需了解详情,请参阅 BigQuery Go API 参考文档。
import (
"context"
"fmt"
"cloud.google.com/go/bigquery"
)
// copyTable demonstrates copying a table from a source to a destination, and
// allowing the copy to overwrite existing data by using truncation.
func copyTable(projectID, datasetID, srcID, dstID string) error {
// projectID := "my-project-id"
// datasetID := "mydataset"
// srcID := "sourcetable"
// dstID := "destinationtable"
ctx := context.Background()
client, err := bigquery.NewClient(ctx, projectID)
if err != nil {
return fmt.Errorf("bigquery.NewClient: %v", err)
}
defer client.Close()
dataset := client.Dataset(datasetID)
copier := dataset.Table(dstID).CopierFrom(dataset.Table(srcID))
copier.WriteDisposition = bigquery.WriteTruncate
job, err := copier.Run(ctx)
if err != nil {
return err
}
status, err := job.Wait(ctx)
if err != nil {
return err
}
if err := status.Err(); err != nil {
return err
}
return nil
}
Java
试用此示例之前,请按照《BigQuery 快速入门:使用客户端库》中的 Java 设置说明进行操作。 如需了解详情,请参阅 BigQuery Java API 参考文档。
import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.CopyJobConfiguration;
import com.google.cloud.bigquery.Job;
import com.google.cloud.bigquery.JobInfo;
import com.google.cloud.bigquery.TableId;
public class CopyTable {
public static void main(String[] args) {
// TODO(developer): Replace these variables before running the sample.
String destinationDatasetName = "MY_DESTINATION_DATASET_NAME";
String destinationTableId = "MY_DESTINATION_TABLE_NAME";
String sourceDatasetName = "MY_SOURCE_DATASET_NAME";
String sourceTableId = "MY_SOURCE_TABLE_NAME";
copyTable(sourceDatasetName, sourceTableId, destinationDatasetName, destinationTableId);
}
public static void copyTable(
String sourceDatasetName,
String sourceTableId,
String destinationDatasetName,
String destinationTableId) {
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();
TableId sourceTable = TableId.of(sourceDatasetName, sourceTableId);
TableId destinationTable = TableId.of(destinationDatasetName, destinationTableId);
// For more information on CopyJobConfiguration see:
// https://googleapis.dev/java/google-cloud-clients/latest/com/google/cloud/bigquery/JobConfiguration.html
CopyJobConfiguration configuration =
CopyJobConfiguration.newBuilder(destinationTable, sourceTable).build();
// For more information on Job see:
// https://googleapis.dev/java/google-cloud-clients/latest/index.html?com/google/cloud/bigquery/package-summary.html
Job job = bigquery.create(JobInfo.of(configuration));
// Blocks until this job completes its execution, either failing or succeeding.
Job completedJob = job.waitFor();
if (completedJob == null) {
System.out.println("Job not executed since it no longer exists.");
return;
} else if (completedJob.getStatus().getError() != null) {
System.out.println(
"BigQuery was unable to copy table due to an error: \n" + job.getStatus().getError());
return;
}
System.out.println("Table copied successfully.");
} catch (BigQueryException | InterruptedException e) {
System.out.println("Table copying job was interrupted. \n" + e.toString());
}
}
}
Node.js
在尝试此示例之前,请按照《BigQuery 快速入门:使用客户端库》中的 Node.js 设置说明进行操作。如需了解详情,请参阅 BigQuery Node.js API 参考文档。
// Import the Google Cloud client library and create a client
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();
async function copyTable() {
// Copies src_dataset:src_table to dest_dataset:dest_table.
/**
* TODO(developer): Uncomment the following lines before running the sample
*/
// const srcDatasetId = "my_src_dataset";
// const srcTableId = "my_src_table";
// const destDatasetId = "my_dest_dataset";
// const destTableId = "my_dest_table";
// Copy the table contents into another table
const [job] = await bigquery
.dataset(srcDatasetId)
.table(srcTableId)
.copy(bigquery.dataset(destDatasetId).table(destTableId));
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;
}
}
PHP
在尝试此示例之前,请按照《BigQuery 快速入门:使用客户端库》中的 PHP 设置说明进行操作。如需了解详情,请参阅 BigQuery PHP API 参考文档。
use Google\Cloud\BigQuery\BigQueryClient;
use Google\Cloud\Core\ExponentialBackoff;
/** Uncomment and populate these variables in your code */
// $projectId = 'The Google project ID';
// $datasetId = 'The BigQuery dataset ID';
// $sourceTableId = 'The BigQuery table ID to copy from';
// $destinationTableId = 'The BigQuery table ID to copy to';
$bigQuery = new BigQueryClient([
'projectId' => $projectId,
]);
$dataset = $bigQuery->dataset($datasetId);
$sourceTable = $dataset->table($sourceTableId);
$destinationTable = $dataset->table($destinationTableId);
$copyConfig = $sourceTable->copy($destinationTable);
$job = $sourceTable->runJob($copyConfig);
// poll the job until it is complete
$backoff = new ExponentialBackoff(10);
$backoff->execute(function () use ($job) {
print('Waiting for job to complete' . PHP_EOL);
$job->reload();
if (!$job->isComplete()) {
throw new Exception('Job has not yet completed', 500);
}
});
// check if the job has errors
if (isset($job->info()['status']['errorResult'])) {
$error = $job->info()['status']['errorResult']['message'];
printf('Error running job: %s' . PHP_EOL, $error);
} else {
print('Table copied successfully' . PHP_EOL);
}
Python
在尝试此示例之前,请按照《BigQuery 快速入门:使用客户端库》中的 Python 设置说明进行操作。如需了解详情,请参阅 BigQuery Python API 参考文档。
from google.cloud import bigquery
# Construct a BigQuery client object.
client = bigquery.Client()
# TODO(developer): Set source_table_id to the ID of the original table.
# source_table_id = "your-project.source_dataset.source_table"
# TODO(developer): Set destination_table_id to the ID of the destination table.
# destination_table_id = "your-project.destination_dataset.destination_table"
job = client.copy_table(source_table_id, destination_table_id)
job.result() # Wait for the job to complete.
print("A copy of the table created.")