diff --git a/samples/install-without-bom/pom.xml b/samples/install-without-bom/pom.xml
index c794ee79f..f19763fda 100644
--- a/samples/install-without-bom/pom.xml
+++ b/samples/install-without-bom/pom.xml
@@ -66,6 +66,12 @@
1.16.2
test
+
+ com.google.cloud
+ google-cloud-bigqueryconnection
+ 0.4.0
+ test
+
junit
junit
diff --git a/samples/snapshot/pom.xml b/samples/snapshot/pom.xml
index 111ba022d..b9be2df99 100644
--- a/samples/snapshot/pom.xml
+++ b/samples/snapshot/pom.xml
@@ -64,6 +64,12 @@
1.16.2
test
+
+ com.google.cloud
+ google-cloud-bigqueryconnection
+ 0.4.0
+ test
+
junit
junit
diff --git a/samples/snippets/pom.xml b/samples/snippets/pom.xml
index 8b7bc6589..4552bace1 100644
--- a/samples/snippets/pom.xml
+++ b/samples/snippets/pom.xml
@@ -79,6 +79,12 @@
1.16.2
test
+
+ com.google.cloud
+ google-cloud-bigqueryconnection
+ 0.4.0
+ test
+
junit
junit
diff --git a/samples/snippets/src/main/java/com/example/bigquery/CreateDatasetAws.java b/samples/snippets/src/main/java/com/example/bigquery/CreateDatasetAws.java
index cd4aa8544..f5b4f0cdc 100644
--- a/samples/snippets/src/main/java/com/example/bigquery/CreateDatasetAws.java
+++ b/samples/snippets/src/main/java/com/example/bigquery/CreateDatasetAws.java
@@ -28,19 +28,21 @@ public class CreateDatasetAws {
public static void main(String[] args) {
// TODO(developer): Replace these variables before running the sample.
+ String projectId = "MY_PROJECT_ID";
String datasetName = "MY_DATASET_NAME";
// Note: As of now location only supports aws-us-east-1
String location = "aws-us-east-1";
- createDatasetAws(datasetName, location);
+ createDatasetAws(projectId, datasetName, location);
}
- public static void createDatasetAws(String datasetName, String location) {
+ public static void createDatasetAws(String projectId, String datasetName, String location) {
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();
- DatasetInfo datasetInfo = DatasetInfo.newBuilder(datasetName).setLocation(location).build();
+ DatasetInfo datasetInfo =
+ DatasetInfo.newBuilder(projectId, datasetName).setLocation(location).build();
Dataset dataset = bigquery.create(datasetInfo);
System.out.println(
diff --git a/samples/snippets/src/main/java/com/example/bigquery/CreateExternalTableAws.java b/samples/snippets/src/main/java/com/example/bigquery/CreateExternalTableAws.java
new file mode 100644
index 000000000..02dd669c8
--- /dev/null
+++ b/samples/snippets/src/main/java/com/example/bigquery/CreateExternalTableAws.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2020 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.bigquery;
+
+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.TableId;
+import com.google.cloud.bigquery.TableInfo;
+
+public class CreateExternalTableAws {
+
+ 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";
+ // Create a aws connection
+ // projects/{project_id}/locations/{location_id}/connections/{connection_id}
+ String connectionId = "MY_CONNECTION_NAME";
+ String sourceUri = "s3://your-bucket-name/";
+ CsvOptions options = CsvOptions.newBuilder().setSkipLeadingRows(1).build();
+ ExternalTableDefinition externalTableDefinition =
+ ExternalTableDefinition.newBuilder(sourceUri, options)
+ .setConnectionId(connectionId)
+ .build();
+ createExternalTableAws(datasetName, tableName, externalTableDefinition);
+ }
+
+ public static void createExternalTableAws(
+ String datasetName, String tableName, ExternalTableDefinition externalTableDefinition) {
+ 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 tableId = TableId.of(datasetName, tableName);
+ TableInfo tableInfo = TableInfo.newBuilder(tableId, externalTableDefinition).build();
+
+ bigquery.create(tableInfo);
+ System.out.println("Aws external table created successfully");
+ } catch (BigQueryException e) {
+ System.out.println("Aws external was not created." + e.toString());
+ }
+ }
+}
diff --git a/samples/snippets/src/test/java/com/example/bigquery/CreateDatasetAwsIT.java b/samples/snippets/src/test/java/com/example/bigquery/CreateDatasetAwsIT.java
index bc315872c..6adb601f3 100644
--- a/samples/snippets/src/test/java/com/example/bigquery/CreateDatasetAwsIT.java
+++ b/samples/snippets/src/test/java/com/example/bigquery/CreateDatasetAwsIT.java
@@ -39,7 +39,7 @@ public class CreateDatasetAwsIT {
private PrintStream out;
private PrintStream originalPrintStream;
- private static final String GOOGLE_CLOUD_PROJECT = requireEnvVar("OMNI_PROJECT_ID");
+ private static final String PROJECT_ID = requireEnvVar("OMNI_PROJECT_ID");
private static String requireEnvVar(String varName) {
String value = System.getenv(varName);
@@ -66,7 +66,7 @@ public void setUp() {
@After
public void tearDown() {
// Clean up
- DeleteDataset.deleteDataset(GOOGLE_CLOUD_PROJECT, datasetName);
+ DeleteDataset.deleteDataset(PROJECT_ID, datasetName);
// restores print statements in the original method
System.out.flush();
System.setOut(originalPrintStream);
@@ -75,7 +75,7 @@ public void tearDown() {
@Test
public void testCreateDatasetAws() {
- CreateDatasetAws.createDatasetAws(datasetName, LOCATION);
+ CreateDatasetAws.createDatasetAws(PROJECT_ID, datasetName, LOCATION);
assertThat(bout.toString()).contains("Aws dataset created successfully :");
}
}
diff --git a/samples/snippets/src/test/java/com/example/bigquery/CreateExternalTableAwsIT.java b/samples/snippets/src/test/java/com/example/bigquery/CreateExternalTableAwsIT.java
new file mode 100644
index 000000000..16b047398
--- /dev/null
+++ b/samples/snippets/src/test/java/com/example/bigquery/CreateExternalTableAwsIT.java
@@ -0,0 +1,137 @@
+/*
+ * Copyright 2020 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.bigquery;
+
+import static com.google.common.truth.Truth.assertThat;
+import static junit.framework.TestCase.assertNotNull;
+
+import com.google.cloud.bigquery.CsvOptions;
+import com.google.cloud.bigquery.ExternalTableDefinition;
+import com.google.cloud.bigquery.Field;
+import com.google.cloud.bigquery.Schema;
+import com.google.cloud.bigquery.StandardSQLTypeName;
+import com.google.cloud.bigquery.connection.v1.AwsCrossAccountRole;
+import com.google.cloud.bigquery.connection.v1.AwsProperties;
+import com.google.cloud.bigquery.connection.v1.Connection;
+import com.google.cloud.bigquery.connection.v1.CreateConnectionRequest;
+import com.google.cloud.bigquery.connection.v1.DeleteConnectionRequest;
+import com.google.cloud.bigquery.connection.v1.LocationName;
+import com.google.cloud.bigqueryconnection.v1.ConnectionServiceClient;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.PrintStream;
+import java.util.UUID;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+public class CreateExternalTableAwsIT {
+
+ private static final String ID = UUID.randomUUID().toString().substring(0, 8);
+ private static final String LOCATION = "aws-us-east-1";
+ private final Logger log = Logger.getLogger(this.getClass().getName());
+ private String datasetName;
+ private String tableName;
+ private String connectionName;
+ private ByteArrayOutputStream bout;
+ private PrintStream out;
+ private PrintStream originalPrintStream;
+
+ private static final String PROJECT_ID = requireEnvVar("OMNI_PROJECT_ID");
+ private static final String AWS_ACCOUNT_ID = requireEnvVar("AWS_ACCOUNT_ID");
+ private static final String AWS_ROLE_ID = requireEnvVar("AWS_ROLE_ID");
+
+ private static String requireEnvVar(String varName) {
+ String value = System.getenv(varName);
+ assertNotNull(
+ "Environment variable " + varName + " is required to perform these tests.",
+ System.getenv(varName));
+ return value;
+ }
+
+ @BeforeClass
+ public static void checkRequirements() {
+ requireEnvVar("OMNI_PROJECT_ID");
+ requireEnvVar("AWS_ACCOUNT_ID");
+ requireEnvVar("AWS_ROLE_ID");
+ }
+
+ @Before
+ public void setUp() throws IOException {
+ datasetName = "CREATE_EXTERNAL_TABLE_AWS_TEST_" + ID;
+ tableName = "CREATE_EXTERNAL_TABLE_AWS_TEST_" + ID;
+ connectionName = "CREATE_EXTERNAL_TABLE_AWS_TEST_" + ID;
+ bout = new ByteArrayOutputStream();
+ out = new PrintStream(bout);
+ originalPrintStream = System.out;
+ System.setOut(out);
+ // create a temporary aws connection
+ try (ConnectionServiceClient client = ConnectionServiceClient.create()) {
+ LocationName parent = LocationName.of(PROJECT_ID, LOCATION);
+ String iamRoleId = String.format("arn:aws:iam::%s:role/%s", AWS_ACCOUNT_ID, AWS_ROLE_ID);
+ AwsCrossAccountRole role = AwsCrossAccountRole.newBuilder().setIamRoleId(iamRoleId).build();
+ AwsProperties awsProperties = AwsProperties.newBuilder().setCrossAccountRole(role).build();
+ Connection connection = Connection.newBuilder().setAws(awsProperties).build();
+ CreateConnectionRequest request =
+ CreateConnectionRequest.newBuilder()
+ .setParent(parent.toString())
+ .setConnection(connection)
+ .setConnectionId(connectionName)
+ .build();
+ connectionName = client.createConnection(request).getName();
+ }
+ // create a temporary dataset
+ CreateDatasetAws.createDatasetAws(PROJECT_ID, datasetName, LOCATION);
+ }
+
+ @After
+ public void tearDown() throws IOException {
+ // delete a temporary aws connection
+ try (ConnectionServiceClient client = ConnectionServiceClient.create()) {
+ DeleteConnectionRequest request =
+ DeleteConnectionRequest.newBuilder().setName(connectionName).build();
+ client.deleteConnection(request);
+ }
+ // Clean up
+ DeleteTable.deleteTable(datasetName, tableName);
+ DeleteDataset.deleteDataset(PROJECT_ID, datasetName);
+ // restores print statements in the original method
+ System.out.flush();
+ System.setOut(originalPrintStream);
+ log.log(Level.INFO, bout.toString());
+ }
+
+ @Test
+ public void testCreateExternalTableAws() {
+ String sourceUri = "s3://cloud-samples-tests/us-states.csv";
+ Schema schema =
+ Schema.of(
+ Field.of("name", StandardSQLTypeName.STRING),
+ Field.of("post_abbr", StandardSQLTypeName.STRING));
+ CsvOptions options = CsvOptions.newBuilder().setSkipLeadingRows(1).build();
+ ExternalTableDefinition externalTable =
+ ExternalTableDefinition.newBuilder(sourceUri, options)
+ .setConnectionId(connectionName)
+ .setSchema(schema)
+ .build();
+ CreateExternalTableAws.createExternalTableAws(datasetName, tableName, externalTable);
+ assertThat(bout.toString()).contains("Aws external table created successfully");
+ }
+}