Skip to content
This repository was archived by the owner on Mar 23, 2026. It is now read-only.

Commit 576e973

Browse files
committed
feat: Partial Projection of Table Metadata
1 parent d178593 commit 576e973

6 files changed

Lines changed: 80 additions & 4 deletions

File tree

google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/BigQuery.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,20 @@ public String getSelector() {
121121
}
122122
}
123123

124+
/**
125+
* Metadata of a BigQuery Table.
126+
*
127+
* @see <a href=
128+
* "https://cloud.google.com/bigquery/docs/reference/rest/v2/tables/get#tablemetadataview">Table
129+
* Resource</a>
130+
*/
131+
enum TableMetadataView {
132+
BASIC,
133+
FULL,
134+
STORAGE_STATS,
135+
TABLE_METADATA_VIEW_UNSPECIFIED;
136+
}
137+
124138
/**
125139
* Fields of a BigQuery Model resource.
126140
*
@@ -384,6 +398,11 @@ public static TableOption fields(TableField... fields) {
384398
public static TableOption autodetectSchema(boolean autodetect) {
385399
return new TableOption(BigQueryRpc.Option.AUTODETECT_SCHEMA, autodetect);
386400
}
401+
402+
/** Returns an option to specify the metadata of the table. */
403+
public static TableOption tableMetadataView(TableMetadataView tableMetadataView) {
404+
return new TableOption(BigQueryRpc.Option.TABLE_METADATA_VIEW, tableMetadataView);
405+
}
387406
}
388407

389408
/* Class for specifying IAM options. */

google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/BigQueryImpl.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -775,6 +775,8 @@ public Table getTable(TableId tableId, TableOption... options) {
775775
? getOptions().getProjectId()
776776
: tableId.getProject());
777777
final Map<BigQueryRpc.Option, ?> optionsMap = optionMap(options);
778+
System.out.println("Penguins");
779+
System.out.println(optionsMap);
778780
try {
779781
com.google.api.services.bigquery.model.Table answer =
780782
runWithRetries(

google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/Table.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,10 @@ public static class Builder extends TableInfo.Builder {
4949
private final BigQuery bigquery;
5050
private final TableInfo.BuilderImpl infoBuilder;
5151

52-
Builder(BigQuery bigquery, TableId tableId, TableDefinition defintion) {
52+
Builder(BigQuery bigquery, TableId tableId, TableDefinition definition) {
5353
this.bigquery = bigquery;
5454
this.infoBuilder = new TableInfo.BuilderImpl();
55-
this.infoBuilder.setTableId(tableId).setDefinition(defintion);
55+
this.infoBuilder.setTableId(tableId).setDefinition(definition);
5656
}
5757

5858
Builder(Table table) {

google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/spi/v2/BigQueryRpc.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
@InternalExtensionOnly
4141
public interface BigQueryRpc extends ServiceRpc {
4242

43-
// These options are part of the Google Cloud BigQuery query parameters
43+
// These options are part of the Google Cloud BigQuery query parameters.
4444
enum Option {
4545
FIELDS("fields"),
4646
DELETE_CONTENTS("deleteContents"),
@@ -56,7 +56,8 @@ enum Option {
5656
START_INDEX("startIndex"),
5757
STATE_FILTER("stateFilter"),
5858
TIMEOUT("timeoutMs"),
59-
REQUESTED_POLICY_VERSION("requestedPolicyVersion");
59+
REQUESTED_POLICY_VERSION("requestedPolicyVersion"),
60+
TABLE_METADATA_VIEW("view");
6061

6162
private final String value;
6263

google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/spi/v2/HttpBigQueryRpc.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -294,6 +294,7 @@ public Table getTable(
294294
.get(projectId, datasetId, tableId)
295295
.setPrettyPrint(false)
296296
.setFields(Option.FIELDS.getString(options))
297+
.setView(getTableMetadataOption(options))
297298
.execute();
298299
} catch (IOException ex) {
299300
BigQueryException serviceException = translate(ex);
@@ -304,6 +305,19 @@ public Table getTable(
304305
}
305306
}
306307

308+
private String getTableMetadataOption(Map<Option, ?> options) {
309+
System.out.println("Seahorses 2");
310+
System.out.println(options);
311+
if (options.containsKey(Option.TABLE_METADATA_VIEW)) {
312+
System.out.println("Penguins 3");
313+
System.out.println(options.get(Option.TABLE_METADATA_VIEW).toString());
314+
return options.get(Option.TABLE_METADATA_VIEW).toString();
315+
}
316+
System.out.println("Penguins 4");
317+
System.out.println("STORAGE_STATS");
318+
return "STORAGE_STATS";
319+
}
320+
307321
@Override
308322
public Tuple<String, Iterable<Table>> listTables(
309323
String projectId, String datasetId, Map<Option, ?> options) {

google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/it/ITBigQueryTest.java

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
import com.google.cloud.bigquery.BigQuery.JobListOption;
5050
import com.google.cloud.bigquery.BigQuery.JobOption;
5151
import com.google.cloud.bigquery.BigQuery.TableField;
52+
import com.google.cloud.bigquery.BigQuery.TableMetadataView;
5253
import com.google.cloud.bigquery.BigQuery.TableOption;
5354
import com.google.cloud.bigquery.BigQueryDryRunResult;
5455
import com.google.cloud.bigquery.BigQueryError;
@@ -1516,6 +1517,8 @@ public void testCreateAndGetTable() {
15161517
assertEquals(DATASET, createdTable.getTableId().getDataset());
15171518
assertEquals(tableName, createdTable.getTableId().getTable());
15181519
Table remoteTable = bigquery.getTable(DATASET, tableName);
1520+
System.out.println("Seahorses");
1521+
System.out.println(remoteTable);
15191522
assertNotNull(remoteTable);
15201523
assertTrue(remoteTable.getDefinition() instanceof StandardTableDefinition);
15211524
assertEquals(createdTable.getTableId(), remoteTable.getTableId());
@@ -1532,6 +1535,43 @@ public void testCreateAndGetTable() {
15321535
assertTrue(remoteTable.delete());
15331536
}
15341537

1538+
@Test
1539+
public void testCreateAndGetTableWithBasicTableMetadataView() {
1540+
System.out.println("Horses");
1541+
String tableName = "test_create_and_get_table_with_basic_metadata_view";
1542+
TableId tableId = TableId.of(DATASET, tableName);
1543+
TimePartitioning partitioning = TimePartitioning.of(Type.DAY);
1544+
Clustering clustering =
1545+
Clustering.newBuilder().setFields(ImmutableList.of(STRING_FIELD_SCHEMA.getName())).build();
1546+
StandardTableDefinition tableDefinition =
1547+
StandardTableDefinition.newBuilder()
1548+
.setSchema(TABLE_SCHEMA)
1549+
.setTimePartitioning(partitioning)
1550+
.setClustering(clustering)
1551+
.build();
1552+
Table createdTable = bigquery.create(TableInfo.of(tableId, tableDefinition));
1553+
System.out.println("Created Table:");
1554+
System.out.println(createdTable);
1555+
assertNotNull(createdTable);
1556+
assertEquals(DATASET, createdTable.getTableId().getDataset());
1557+
assertEquals(tableName, createdTable.getTableId().getTable());
1558+
TableOption tableOption = BigQuery.TableOption.tableMetadataView(TableMetadataView.BASIC);
1559+
Table remoteTable = bigquery.getTable(DATASET, tableName, tableOption);
1560+
assertNotNull(remoteTable);
1561+
assertTrue(remoteTable.getDefinition() instanceof StandardTableDefinition);
1562+
assertEquals(createdTable.getTableId(), remoteTable.getTableId());
1563+
assertEquals(TableDefinition.Type.TABLE, remoteTable.getDefinition().getType());
1564+
assertEquals(TABLE_SCHEMA, remoteTable.getDefinition().getSchema());
1565+
System.out.println("Penguins 2");
1566+
System.out.println(remoteTable);
1567+
// Next four values are considered transient fields that should not be calculated
1568+
// assertNull(remoteTable.getLastModifiedTime());
1569+
// assertNull(remoteTable.<StandardTableDefinition>getDefinition().getNumBytes());
1570+
// assertNull(remoteTable.<StandardTableDefinition>getDefinition().getNumLongTermBytes());
1571+
// assertNull(remoteTable.<StandardTableDefinition>getDefinition().getNumRows());
1572+
assertTrue(remoteTable.delete());
1573+
}
1574+
15351575
@Test
15361576
public void testCreateAndGetTableWithSelectedField() {
15371577
String tableName = "test_create_and_get_selected_fields_table";

0 commit comments

Comments
 (0)