@Test public void testCreateViewTable() throws InterruptedException { String tableName = "test_create_view_table"; TableId tableId = TableId.of(DATASET, tableName); ViewDefinition viewDefinition = ViewDefinition.of( "SELECT TimestampField, StringField, BooleanField FROM " + DATASET + "." + TABLE_ID.table()); TableInfo tableInfo = TableInfo.of(tableId, viewDefinition); Table createdTable = bigquery.create(tableInfo); assertNotNull(createdTable); assertEquals(DATASET, createdTable.tableId().dataset()); assertEquals(tableName, createdTable.tableId().table()); Table remoteTable = bigquery.getTable(DATASET, tableName); assertNotNull(remoteTable); assertEquals(createdTable.tableId(), remoteTable.tableId()); assertTrue(remoteTable.definition() instanceof ViewDefinition); Schema expectedSchema = Schema.builder() .addField( Field.builder("TimestampField", Field.Type.timestamp()) .mode(Field.Mode.NULLABLE) .build()) .addField( Field.builder("StringField", Field.Type.string()).mode(Field.Mode.NULLABLE).build()) .addField( Field.builder("BooleanField", Field.Type.bool()).mode(Field.Mode.NULLABLE).build()) .build(); assertEquals(expectedSchema, remoteTable.definition().schema()); QueryRequest request = QueryRequest.builder("SELECT * FROM " + tableName) .defaultDataset(DatasetId.of(DATASET)) .maxWaitTime(60000L) .maxResults(1000L) .build(); QueryResponse response = bigquery.query(request); while (!response.jobCompleted()) { response = bigquery.getQueryResults(response.jobId()); Thread.sleep(1000); } int rowCount = 0; for (List<FieldValue> row : response.result().values()) { FieldValue timestampCell = row.get(0); FieldValue stringCell = row.get(1); FieldValue booleanCell = row.get(2); assertEquals(FieldValue.Attribute.PRIMITIVE, timestampCell.attribute()); assertEquals(FieldValue.Attribute.PRIMITIVE, stringCell.attribute()); assertEquals(FieldValue.Attribute.PRIMITIVE, booleanCell.attribute()); assertEquals(1408452095220000L, timestampCell.timestampValue()); assertEquals("stringValue", stringCell.stringValue()); assertEquals(false, booleanCell.booleanValue()); rowCount++; } assertEquals(2, rowCount); assertTrue(remoteTable.delete()); }
@Test public void testQueryJob() throws InterruptedException { String tableName = "test_query_job_table"; String query = new StringBuilder() .append("SELECT TimestampField, StringField, BooleanField FROM ") .append(TABLE_ID.table()) .toString(); TableId destinationTable = TableId.of(DATASET, tableName); QueryJobConfiguration configuration = QueryJobConfiguration.builder(query) .defaultDataset(DatasetId.of(DATASET)) .destinationTable(destinationTable) .build(); Job remoteJob = bigquery.create(JobInfo.of(configuration)); while (!remoteJob.isDone()) { Thread.sleep(1000); } assertNull(remoteJob.status().error()); QueryResponse response = bigquery.getQueryResults(remoteJob.jobId()); while (!response.jobCompleted()) { Thread.sleep(1000); response = bigquery.getQueryResults(response.jobId()); } assertFalse(response.hasErrors()); assertEquals(QUERY_RESULT_SCHEMA, response.result().schema()); int rowCount = 0; for (List<FieldValue> row : response.result().values()) { FieldValue timestampCell = row.get(0); FieldValue stringCell = row.get(1); FieldValue booleanCell = row.get(2); assertEquals(FieldValue.Attribute.PRIMITIVE, timestampCell.attribute()); assertEquals(FieldValue.Attribute.PRIMITIVE, stringCell.attribute()); assertEquals(FieldValue.Attribute.PRIMITIVE, booleanCell.attribute()); assertEquals(1408452095220000L, timestampCell.timestampValue()); assertEquals("stringValue", stringCell.stringValue()); assertEquals(false, booleanCell.booleanValue()); rowCount++; } assertEquals(2, rowCount); assertTrue(bigquery.delete(DATASET, tableName)); Job queryJob = bigquery.getJob(remoteJob.jobId()); JobStatistics.QueryStatistics statistics = queryJob.statistics(); assertNotNull(statistics.queryPlan()); }
@Test public void testQuery() throws InterruptedException { String query = new StringBuilder() .append("SELECT TimestampField, StringField, BooleanField FROM ") .append(TABLE_ID.table()) .toString(); QueryRequest request = QueryRequest.builder(query) .defaultDataset(DatasetId.of(DATASET)) .maxWaitTime(60000L) .maxResults(1000L) .build(); QueryResponse response = bigquery.query(request); while (!response.jobCompleted()) { Thread.sleep(1000); response = bigquery.getQueryResults(response.jobId()); } assertEquals(QUERY_RESULT_SCHEMA, response.result().schema()); int rowCount = 0; for (List<FieldValue> row : response.result().values()) { FieldValue timestampCell = row.get(0); FieldValue stringCell = row.get(1); FieldValue booleanCell = row.get(2); assertEquals(FieldValue.Attribute.PRIMITIVE, timestampCell.attribute()); assertEquals(FieldValue.Attribute.PRIMITIVE, stringCell.attribute()); assertEquals(FieldValue.Attribute.PRIMITIVE, booleanCell.attribute()); assertEquals(1408452095220000L, timestampCell.timestampValue()); assertEquals("stringValue", stringCell.stringValue()); assertEquals(false, booleanCell.booleanValue()); rowCount++; } assertEquals(2, rowCount); Job queryJob = bigquery.getJob(response.jobId()); JobStatistics.QueryStatistics statistics = queryJob.statistics(); assertNotNull(statistics.queryPlan()); }
@Test public void testInsertFromFile() throws InterruptedException { String destinationTableName = "test_insert_from_file_table"; TableId tableId = TableId.of(DATASET, destinationTableName); WriteChannelConfiguration configuration = WriteChannelConfiguration.builder(tableId) .formatOptions(FormatOptions.json()) .createDisposition(JobInfo.CreateDisposition.CREATE_IF_NEEDED) .schema(TABLE_SCHEMA) .build(); try (WriteChannel channel = bigquery.writer(configuration)) { channel.write(ByteBuffer.wrap(JSON_CONTENT.getBytes(StandardCharsets.UTF_8))); } catch (IOException e) { fail("IOException was not expected"); } // wait until the new table is created. If the table is never created the test will time-out while (bigquery.getTable(tableId) == null) { Thread.sleep(1000L); } Page<List<FieldValue>> rows = bigquery.listTableData(tableId); int rowCount = 0; for (List<FieldValue> row : rows.values()) { FieldValue timestampCell = row.get(0); FieldValue stringCell = row.get(1); FieldValue integerCell = row.get(2); FieldValue booleanCell = row.get(3); FieldValue recordCell = row.get(4); assertEquals(FieldValue.Attribute.PRIMITIVE, timestampCell.attribute()); assertEquals(FieldValue.Attribute.PRIMITIVE, stringCell.attribute()); assertEquals(FieldValue.Attribute.REPEATED, integerCell.attribute()); assertEquals(FieldValue.Attribute.PRIMITIVE, booleanCell.attribute()); assertEquals(FieldValue.Attribute.RECORD, recordCell.attribute()); assertEquals(1408452095220000L, timestampCell.timestampValue()); assertEquals("stringValue", stringCell.stringValue()); assertEquals(0, integerCell.repeatedValue().get(0).longValue()); assertEquals(1, integerCell.repeatedValue().get(1).longValue()); assertEquals(false, booleanCell.booleanValue()); assertEquals(-14182916000000L, recordCell.recordValue().get(0).timestampValue()); assertTrue(recordCell.recordValue().get(1).isNull()); assertEquals(1, recordCell.recordValue().get(2).repeatedValue().get(0).longValue()); assertEquals(0, recordCell.recordValue().get(2).repeatedValue().get(1).longValue()); assertEquals(true, recordCell.recordValue().get(3).booleanValue()); rowCount++; } assertEquals(2, rowCount); assertTrue(bigquery.delete(DATASET, destinationTableName)); }
@Test public void testListAllTableData() { Page<List<FieldValue>> rows = bigquery.listTableData(TABLE_ID); int rowCount = 0; for (List<FieldValue> row : rows.values()) { FieldValue timestampCell = row.get(0); FieldValue stringCell = row.get(1); FieldValue integerCell = row.get(2); FieldValue booleanCell = row.get(3); FieldValue recordCell = row.get(4); assertEquals(FieldValue.Attribute.PRIMITIVE, timestampCell.attribute()); assertEquals(FieldValue.Attribute.PRIMITIVE, stringCell.attribute()); assertEquals(FieldValue.Attribute.REPEATED, integerCell.attribute()); assertEquals(FieldValue.Attribute.PRIMITIVE, booleanCell.attribute()); assertEquals(FieldValue.Attribute.RECORD, recordCell.attribute()); assertEquals(1408452095220000L, timestampCell.timestampValue()); assertEquals("stringValue", stringCell.stringValue()); assertEquals(0, integerCell.repeatedValue().get(0).longValue()); assertEquals(1, integerCell.repeatedValue().get(1).longValue()); assertEquals(false, booleanCell.booleanValue()); assertEquals(-14182916000000L, recordCell.recordValue().get(0).timestampValue()); assertTrue(recordCell.recordValue().get(1).isNull()); assertEquals(1, recordCell.recordValue().get(2).repeatedValue().get(0).longValue()); assertEquals(0, recordCell.recordValue().get(2).repeatedValue().get(1).longValue()); assertEquals(true, recordCell.recordValue().get(3).booleanValue()); rowCount++; } assertEquals(2, rowCount); }
@Test public void testCreateExternalTable() throws InterruptedException { String tableName = "test_create_external_table"; TableId tableId = TableId.of(DATASET, tableName); ExternalTableDefinition externalTableDefinition = ExternalTableDefinition.of( "gs://" + BUCKET + "/" + JSON_LOAD_FILE, TABLE_SCHEMA, FormatOptions.json()); TableInfo tableInfo = TableInfo.of(tableId, externalTableDefinition); Table createdTable = bigquery.create(tableInfo); assertNotNull(createdTable); assertEquals(DATASET, createdTable.tableId().dataset()); assertEquals(tableName, createdTable.tableId().table()); Table remoteTable = bigquery.getTable(DATASET, tableName); assertNotNull(remoteTable); assertTrue(remoteTable.definition() instanceof ExternalTableDefinition); assertEquals(createdTable.tableId(), remoteTable.tableId()); assertEquals(TABLE_SCHEMA, remoteTable.definition().schema()); QueryRequest request = QueryRequest.builder( "SELECT TimestampField, StringField, IntegerField, BooleanField FROM " + DATASET + "." + tableName) .defaultDataset(DatasetId.of(DATASET)) .maxWaitTime(60000L) .maxResults(1000L) .build(); QueryResponse response = bigquery.query(request); while (!response.jobCompleted()) { response = bigquery.getQueryResults(response.jobId()); Thread.sleep(1000); } long integerValue = 0; int rowCount = 0; for (List<FieldValue> row : response.result().values()) { FieldValue timestampCell = row.get(0); FieldValue stringCell = row.get(1); FieldValue integerCell = row.get(2); FieldValue booleanCell = row.get(3); assertEquals(FieldValue.Attribute.PRIMITIVE, timestampCell.attribute()); assertEquals(FieldValue.Attribute.PRIMITIVE, stringCell.attribute()); assertEquals(FieldValue.Attribute.PRIMITIVE, integerCell.attribute()); assertEquals(FieldValue.Attribute.PRIMITIVE, booleanCell.attribute()); assertEquals(1408452095220000L, timestampCell.timestampValue()); assertEquals("stringValue", stringCell.stringValue()); assertEquals(integerValue, integerCell.longValue()); assertEquals(false, booleanCell.booleanValue()); integerValue = ~integerValue & 0x1; rowCount++; } assertEquals(4, rowCount); assertTrue(remoteTable.delete()); }