diff --git a/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/BigQuery.java b/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/BigQuery.java index 9d69342f754a..7f216910f8d9 100644 --- a/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/BigQuery.java +++ b/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/BigQuery.java @@ -522,7 +522,7 @@ public int hashCode() { * } catch (BigQueryException e) { * // the dataset was not created * } - * } + * } * * @throws BigQueryException upon failure */ @@ -538,7 +538,7 @@ public int hashCode() { * String fieldName = "string_field"; * TableId tableId = TableId.of(datasetName, tableName); * // Table field definition - * Field field = Field.of(fieldName, Field.Type.string()); + * Field field = Field.of(fieldName, LegacySQLTypeName.STRING); * // Table schema definition * Schema schema = Schema.of(field); * TableDefinition tableDefinition = StandardTableDefinition.of(schema); @@ -553,6 +553,32 @@ public int hashCode() { /** * Creates a new job. * + *
Example of loading a newline-delimited-json file with textual fields from GCS to a table. + *
{@code + * String datasetName = "my_dataset_name"; + * String tableName = "my_table_name"; + * String sourceUri = "gs://cloud-samples-data/bigquery/us-states/us-states.json"; + * TableId tableId = TableId.of(datasetName, tableName); + * // Table field definition + * Field[] fields = new Field[] { + * Field.of("name", LegacySQLTypeName.STRING), + * Field.of("post_abbr", LegacySQLTypeName.STRING) + * }; + * // Table schema definition + * Schema schema = Schema.of(fields); + * LoadJobConfiguration configuration = LoadJobConfiguration.builder(tableId, sourceUri) + * .setFormatOptions(FormatOptions.json()) + * .setCreateDisposition(CreateDisposition.CREATE_IF_NEEDED) + * .setSchema(schema) + * .build(); + * // Load the table + * Job remoteLoadJob = bigquery.create(JobInfo.of(configuration)); + * remoteLoadJob = remoteLoadJob.waitFor(); + * // Check the table + * System.out.println("State: " + remoteLoadJob.getStatus().getState()); + * return ((StandardTableDefinition) bigquery.getTable(tableId).getDefinition()).getNumRows(); + * }+ * *
Example of creating a query job. *
{@code * String query = "SELECT field FROM my_dataset_name.my_table_name"; @@ -861,8 +887,7 @@ public int hashCode() { * Lists the table's rows. * *Example of listing table rows, specifying the page size. - * - *
{@code + *{@code * String datasetName = "my_dataset_name"; * String tableName = "my_table_name"; * // This example reads the result 100 rows per RPC call. If there's no need to limit the number, @@ -882,8 +907,7 @@ public int hashCode() { * Lists the table's rows. * *Example of listing table rows, specifying the page size. - * - *
{@code + *{@code * String datasetName = "my_dataset_name"; * String tableName = "my_table_name"; * TableId tableIdObject = TableId.of(datasetName, tableName); @@ -891,7 +915,7 @@ public int hashCode() { * // simply omit the option. * TableResult tableData = * bigquery.listTableData(tableIdObject, TableDataListOption.pageSize(100)); - * for (FieldValueList row : rowIterator.hasNext()) { + * for (FieldValueList row : tableData.iterateAll()) { * // do something with the row * } * }@@ -904,17 +928,16 @@ public int hashCode() { * Lists the table's rows. If the {@code schema} is not {@code null}, it is available to the * {@link FieldValueList} iterated over. * - *Example of listing table rows. - * - *
{@code + *Example of listing table rows with schema. + *
{@code * String datasetName = "my_dataset_name"; * String tableName = "my_table_name"; * Schema schema = ...; - * String field = "my_field"; + * String field = "field"; * TableResult tableData = * bigquery.listTableData(datasetName, tableName, schema); * for (FieldValueList row : tableData.iterateAll()) { - * row.get(field) + * row.get(field); * } * }* @@ -927,9 +950,8 @@ TableResult listTableData( * Lists the table's rows. If the {@code schema} is not {@code null}, it is available to the * {@link FieldValueList} iterated over. * - *Example of listing table rows. - * - *
{@code + *Example of listing table rows with schema. + *
{@code * Schema schema = * Schema.of( * Field.of("word", LegacySQLTypeName.STRING), @@ -1047,28 +1069,21 @@ TableResult listTableData( * queries. Since dry-run queries are not actually executed, there's no way to retrieve results. * *Example of running a query. - * - *
{@code - * String query = "SELECT distinct(corpus) FROM `bigquery-public-data.samples.shakespeare`"; - * QueryJobConfiguration queryConfig = QueryJobConfiguration.of(query); - * - * // To run the legacy syntax queries use the following code instead: - * // String query = "SELECT unique(corpus) FROM [bigquery-public-data:samples.shakespeare]" - * // QueryJobConfiguration queryConfig = - * // QueryJobConfiguration.newBuilder(query).setUseLegacySql(true).build(); - * + *{@code + * String query = "SELECT unique(corpus) FROM [bigquery-public-data:samples.shakespeare]"; + * QueryJobConfiguration queryConfig = + * QueryJobConfiguration.newBuilder(query).setUseLegacySql(true).build(); * for (FieldValueList row : bigquery.query(queryConfig).iterateAll()) { * // do something with the data * } * }* *Example of running a query with query parameters. - * - *
{@code - * String query = - * "SELECT distinct(corpus) FROM `bigquery-public-data.samples.shakespeare` where word_count > ?"; + *{@code + * String query = "SELECT distinct(corpus) FROM `bigquery-public-data.samples.shakespeare` where word_count > @wordCount"; + * // Note, standard SQL is required to use query parameters. Legacy SQL will not work. * QueryJobConfiguration queryConfig = QueryJobConfiguration.newBuilder(query) - * .addPositionalParameter(QueryParameterValue.int64(5)) + * .addNamedParameter("wordCount", QueryParameterValue.int64(5)) * .build(); * for (FieldValueList row : bigquery.query(queryConfig).iterateAll()) { * // do something with the data @@ -1092,18 +1107,6 @@ TableResult query(QueryJobConfiguration configuration, JobOption... options) *See {@link #query(QueryJobConfiguration, JobOption...)} for examples on populating a {@link * QueryJobConfiguration}. * - *
The recommended way to create a randomly generated JobId is the following: - * - *
{@code - * JobId jobId = JobId.of(); - * }- * - * For a user specified job id with an optional prefix use the following: - * - *{@code - * JobId jobId = JobId.of("my_prefix-my_unique_job_id"); - * }- * * @throws BigQueryException upon failure * @throws InterruptedException if the current thread gets interrupted while waiting for the query * to complete diff --git a/google-cloud-examples/src/main/java/com/google/cloud/examples/bigquery/snippets/BigQuerySnippets.java b/google-cloud-examples/src/main/java/com/google/cloud/examples/bigquery/snippets/BigQuerySnippets.java index d6701804a6f9..ea95c59bbcf9 100644 --- a/google-cloud-examples/src/main/java/com/google/cloud/examples/bigquery/snippets/BigQuerySnippets.java +++ b/google-cloud-examples/src/main/java/com/google/cloud/examples/bigquery/snippets/BigQuerySnippets.java @@ -25,6 +25,8 @@ import com.google.api.client.util.Charsets; import com.google.api.gax.paging.Page; import com.google.cloud.bigquery.BigQuery; +import com.google.cloud.bigquery.JobInfo.CreateDisposition; +import com.google.cloud.bigquery.LoadJobConfiguration; import com.google.cloud.bigquery.TableResult; import com.google.cloud.bigquery.BigQuery.DatasetDeleteOption; import com.google.cloud.bigquery.BigQuery.DatasetListOption; @@ -378,6 +380,38 @@ public long writeFileToTable(String datasetName, String tableName, Path csvPath) // [END writeFileToTable] } + /** + * Example of loading a newline-delimited-json file with textual fields from GCS to a table. + */ + // [TARGET create(JobInfo, JobOption...)] + // [VARIABLE "my_dataset_name"] + // [VARIABLE "my_table_name"] + public Long writeRemoteFileToTable(String datasetName, String tableName) + throws InterruptedException { + // [START bigquery_load_table_gcs_json] + String sourceUri = "gs://cloud-samples-data/bigquery/us-states/us-states.json"; + TableId tableId = TableId.of(datasetName, tableName); + // Table field definition + Field[] fields = new Field[] { + Field.of("name", LegacySQLTypeName.STRING), + Field.of("post_abbr", LegacySQLTypeName.STRING) + }; + // Table schema definition + Schema schema = Schema.of(fields); + LoadJobConfiguration configuration = LoadJobConfiguration.builder(tableId, sourceUri) + .setFormatOptions(FormatOptions.json()) + .setCreateDisposition(CreateDisposition.CREATE_IF_NEEDED) + .setSchema(schema) + .build(); + // Load the table + Job remoteLoadJob = bigquery.create(JobInfo.of(configuration)); + remoteLoadJob = remoteLoadJob.waitFor(); + // Check the table + System.out.println("State: " + remoteLoadJob.getStatus().getState()); + return ((StandardTableDefinition) bigquery.getTable(tableId).getDefinition()).getNumRows(); + // [END bigquery_load_table_gcs_json] + } + /** * Example of inserting rows into a table without running a load job. */ @@ -470,7 +504,9 @@ public TableResult listTableDataFromId(String datasetName, String tableName) { return tableData; } - /** Example of listing table rows with schema. */ + /** + * Example of listing table rows with schema. + */ // [TARGET listTableData(String, String, Schema, TableDataListOption...)] // [VARIABLE "my_dataset_name"] // [VARIABLE "my_table_name"] @@ -488,7 +524,9 @@ public TableResult listTableDataSchema( return tableData; } - /** Example of listing table rows with schema. */ + /** + * Example of listing table rows with schema. + */ // [TARGET listTableData(TableId, Schema, TableDataListOption...)] public FieldValueList listTableDataSchemaId() { // [START listTableDataSchemaId] @@ -607,8 +645,10 @@ public boolean cancelJobFromId(String jobName) { return success; } - /** Example of running a query. */ - // [TARGET query(QueryJobConfiguration, QueryOption...)] + /** + * Example of running a query. + */ + // [TARGET query(QueryJobConfiguration, JobOption...)] // [VARIABLE "SELECT unique(corpus) FROM [bigquery-public-data:samples.shakespeare]"] public void runQuery(String query) throws InterruptedException { // [START runQuery] @@ -620,10 +660,11 @@ public void runQuery(String query) throws InterruptedException { // [END runQuery] } - /** Example of running a query with query parameters. */ - // [TARGET query(QueryJobConfiguration, QueryOption...)] - // [VARIABLE "SELECT distinct(corpus) FROM `bigquery-public-data.samples.shakespeare` where - // word_count > @wordCount"] + /** + * Example of running a query with query parameters. + */ + // [TARGET query(QueryJobConfiguration, JobOption...)] + // [VARIABLE "SELECT distinct(corpus) FROM `bigquery-public-data.samples.shakespeare` where word_count > @wordCount"] public void runQueryWithParameters(String query) throws InterruptedException { // [START runQueryWithParameters] // Note, standard SQL is required to use query parameters. Legacy SQL will not work. diff --git a/google-cloud-examples/src/test/java/com/google/cloud/examples/bigquery/snippets/ITBigQuerySnippets.java b/google-cloud-examples/src/test/java/com/google/cloud/examples/bigquery/snippets/ITBigQuerySnippets.java index d5c081f8368f..2ef79ed95a83 100644 --- a/google-cloud-examples/src/test/java/com/google/cloud/examples/bigquery/snippets/ITBigQuerySnippets.java +++ b/google-cloud-examples/src/test/java/com/google/cloud/examples/bigquery/snippets/ITBigQuerySnippets.java @@ -20,6 +20,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import com.google.api.gax.paging.Page; @@ -48,6 +49,7 @@ import java.net.URISyntaxException; import java.nio.file.Path; import java.nio.file.Paths; +import java.util.ArrayList; import java.util.Iterator; import java.util.Set; import java.util.concurrent.ExecutionException; @@ -197,6 +199,24 @@ public void testWriteAndListTableData() assertTrue(bigquerySnippets.deleteTable(DATASET, tableName)); } + @Test + public void testWriteRemoteJsonToTable() throws InterruptedException { + String datasetName = "test_dataset"; + String tableName = "us_states"; + Table table = bigquery.getTable(datasetName, tableName); + assertNull(table); + + Long result = bigquerySnippets.writeRemoteFileToTable(datasetName, tableName); + table = bigquery.getTable(datasetName, tableName); + assertNotNull(table); + ArrayListtableFieldNames = new ArrayList<>(); + for (Field field: table.getDefinition().getSchema().getFields()) { + tableFieldNames.add(field.getName()); + } + bigquery.delete(table.getTableId()); + assertEquals(Long.valueOf(50), result); + } + @Test public void testInsertAllAndListTableData() throws IOException, InterruptedException { String tableName = "test_insert_all_and_list_table_data";