diff --git a/README.md b/README.md
index e61c8713df..9ec60a4f35 100644
--- a/README.md
+++ b/README.md
@@ -111,6 +111,7 @@ Samples are in the [`samples/`](https://github.com/googleapis/java-bigquery/tree
| Sample | Source Code | Try it |
| --------------------------- | --------------------------------- | ------ |
+| Native Image Bigquery Sample | [source code](https://github.com/googleapis/java-bigquery/blob/main/samples/native-image-sample/src/main/java/com/example/bigquery/NativeImageBigquerySample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-bigquery&page=editor&open_in_editor=samples/native-image-sample/src/main/java/com/example/bigquery/NativeImageBigquerySample.java) |
| Add Column Load Append | [source code](https://github.com/googleapis/java-bigquery/blob/main/samples/snippets/src/main/java/com/example/bigquery/AddColumnLoadAppend.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-bigquery&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/bigquery/AddColumnLoadAppend.java) |
| Add Empty Column | [source code](https://github.com/googleapis/java-bigquery/blob/main/samples/snippets/src/main/java/com/example/bigquery/AddEmptyColumn.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-bigquery&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/bigquery/AddEmptyColumn.java) |
| Auth Drive Scope | [source code](https://github.com/googleapis/java-bigquery/blob/main/samples/snippets/src/main/java/com/example/bigquery/AuthDriveScope.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-bigquery&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/bigquery/AuthDriveScope.java) |
diff --git a/samples/native-image-sample/README.md b/samples/native-image-sample/README.md
new file mode 100644
index 0000000000..e4e4b52eeb
--- /dev/null
+++ b/samples/native-image-sample/README.md
@@ -0,0 +1,47 @@
+# BigQuery Sample Application with Native Image
+
+The BigQuery sample application demonstrates some common operations with [Google Cloud BigQuery](https://cloud.google.com/bigquery) and is compatible with Native Image compilation.
+
+## Setup Instructions
+
+1. Follow the [GCP Project Authentication and Native Image Setup Instructions](../../README.md).
+
+2. [Enable the BigQuery APIs](https://console.cloud.google.com/apis/api/bigquery.googleapis.com).
+
+### Run with Native Image Support
+
+Navigate to this directory in a new terminal.
+
+1. Compile the application using the Native Image Compiler. This step may take a few minutes.
+
+ ```
+ mvn package -P native -DskipTests
+ ```
+
+2. Run the application:
+
+ ```
+ ./target/native-image-sample
+ ```
+
+3. The application will create a sample BigQuery dataset in your GCP project called `nativeimage_test_dataset` and perform some simple operations like creating a table, inserting data, and running a query.
+
+ If you would like to delete the BigQuery dataset later, you can manage your BigQuery resources through [Google Cloud Console](https://console.cloud.google.com/bigquery) to clean up BigQuery resources under your project.
+
+ When you run the application, you'll see output like this in the terminal:
+
+ ```
+ Created new table: nativeimage_test_table_2351b0891d2f48af9309bd289c3bad13
+ Successfully inserted test row.
+ Queried the following records:
+ User id: TestUser-2f39e3ec-d81a-483f-9ec0-b9bd54155710 | age: 40
+ Deleted table: nativeimage_test_table_2351b0891d2f48af9309bd289c3bad13
+ ```
+
+### Sample Integration test with Native Image Support
+
+In order to run the sample integration test, call the following command:
+
+```
+mvn test -Pnative
+```
\ No newline at end of file
diff --git a/samples/native-image-sample/pom.xml b/samples/native-image-sample/pom.xml
new file mode 100644
index 0000000000..225e3ea208
--- /dev/null
+++ b/samples/native-image-sample/pom.xml
@@ -0,0 +1,161 @@
+
+
+
Note: This application will create a BigQuery dataset in your GCP project. You can delete this
+ * by viewing BigQuery in Cloud Console https://console.cloud.google.com/bigquery or by uncommenting
+ * the call to `deleteDataset(..)` made in main().
+ */
+public class NativeImageBigquerySample {
+
+ private static final String DATASET_ID = "nativeimage_test_dataset";
+
+ private static final String TABLE_ID = "nativeimage_test_table";
+
+ private static final Schema TABLE_SCHEMA =
+ Schema.of(
+ Field.of("id", StandardSQLTypeName.STRING), Field.of("age", StandardSQLTypeName.INT64));
+
+ /** Entrypoint to the application. */
+ public static void main(String[] args) throws InterruptedException {
+ BigQuery bigQuery = BigQueryOptions.getDefaultInstance().getService();
+
+ if (!hasDataset(bigQuery, DATASET_ID)) {
+ createDataset(bigQuery, DATASET_ID);
+ }
+
+ String tableName = TABLE_ID + "_" + UUID.randomUUID().toString().replace("-", "");
+ createTable(bigQuery, DATASET_ID, tableName, TABLE_SCHEMA);
+ String testId = "TestUser-" + UUID.randomUUID().toString();
+ int testAge = 40;
+ insertTestRecord(bigQuery, DATASET_ID, tableName, testId, testAge);
+ queryTable(bigQuery, DATASET_ID, tableName);
+
+ // Clean up resources.
+ deleteTable(bigQuery, DATASET_ID, tableName);
+
+ // Uncomment this to delete the created dataset.
+ // deleteDataset(bigQuery, DATASET_ID);
+ }
+
+ static String queryTable(BigQuery bigQuery, String datasetName, String tableName)
+ throws InterruptedException {
+ String fullyQualifiedTable = datasetName + "." + tableName;
+ String query = "SELECT * FROM " + fullyQualifiedTable;
+
+ QueryJobConfiguration queryConfig = QueryJobConfiguration.newBuilder(query).build();
+ TableResult results = bigQuery.query(queryConfig);
+
+ String result = "";
+ System.out.println("Queried the following records: ");
+ for (FieldValueList row : results.iterateAll()) {
+ String rowStatement =
+ String.format(
+ "User id: %s | age: %d\n",
+ row.get("id").getStringValue(), row.get("age").getLongValue());
+ result += rowStatement;
+ System.out.println(row);
+ }
+ return result;
+ }
+
+ static void insertTestRecord(
+ BigQuery bigQuery, String datasetName, String tableName, String id, int age) {
+
+ Map tables = bigQuery.listTables(datasetName);
+ for (Table table : tables.iterateAll()) {
+ if (tableName.equals(table.getTableId().getTable())) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ static void createDataset(BigQuery bigQuery, String datasetName) {
+ DatasetInfo datasetInfo = DatasetInfo.newBuilder(datasetName).build();
+ Dataset newDataset = bigQuery.create(datasetInfo);
+ System.out.println("Created new dataset: " + newDataset.getDatasetId().getDataset());
+ }
+
+ static boolean hasDataset(BigQuery bigQuery, String datasetName) {
+ Page