-
Notifications
You must be signed in to change notification settings - Fork 1.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(bigquery): add support for sheets ranges (#9416)
* add range parameter * update samples to use range * update renge usage
- Loading branch information
Showing
7 changed files
with
213 additions
and
104 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,73 @@ | ||
# Copyright 2019 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 | ||
# | ||
# https://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. | ||
|
||
|
||
def query_external_sheets_permanent_table(dataset_id): | ||
|
||
# [START bigquery_query_external_sheets_perm] | ||
from google.cloud import bigquery | ||
import google.auth | ||
|
||
# Create credentials with Drive & BigQuery API scopes. | ||
# Both APIs must be enabled for your project before running this code. | ||
credentials, project = google.auth.default( | ||
scopes=[ | ||
"https://www.googleapis.com/auth/drive", | ||
"https://www.googleapis.com/auth/bigquery", | ||
] | ||
) | ||
|
||
# TODO(developer): Construct a BigQuery client object. | ||
client = bigquery.Client(credentials=credentials, project=project) | ||
|
||
# TODO(developer): Set dataset_id to the ID of the dataset to fetch. | ||
# dataset_id = "your-project.your_dataset" | ||
|
||
# Configure the external data source. | ||
dataset = client.get_dataset(dataset_id) | ||
table_id = "us_states" | ||
schema = [ | ||
bigquery.SchemaField("name", "STRING"), | ||
bigquery.SchemaField("post_abbr", "STRING"), | ||
] | ||
table = bigquery.Table(dataset.table(table_id), schema=schema) | ||
external_config = bigquery.ExternalConfig("GOOGLE_SHEETS") | ||
# Use a shareable link or grant viewing access to the email address you | ||
# used to authenticate with BigQuery (this example Sheet is public). | ||
sheet_url = ( | ||
"https://docs.google.com/spreadsheets" | ||
"/d/1i_QCL-7HcSyUZmIbP9E6lO_T5u3HnpLe7dnpHaijg_E/edit?usp=sharing" | ||
) | ||
external_config.source_uris = [sheet_url] | ||
external_config.options.skip_leading_rows = 1 # Optionally skip header row. | ||
external_config.options.range = ( | ||
"us-states!A20:B49" | ||
) # Optionally set range of the sheet to query from. | ||
table.external_data_configuration = external_config | ||
|
||
# Create a permanent table linked to the Sheets file. | ||
table = client.create_table(table) # Make an API request. | ||
|
||
# Example query to find states starting with "W". | ||
sql = 'SELECT * FROM `{}.{}` WHERE name LIKE "W%"'.format(dataset_id, table_id) | ||
query_job = client.query(sql) # Make an API request. | ||
|
||
# Wait for the query to complete. | ||
w_states = list(query_job) | ||
print( | ||
"There are {} states with names starting with W in the selected range.".format( | ||
len(w_states) | ||
) | ||
) | ||
# [END bigquery_query_external_sheets_perm] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
# Copyright 2019 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 | ||
# | ||
# https://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. | ||
|
||
|
||
def query_external_sheets_temporary_table(): | ||
|
||
# [START bigquery_query_external_sheets_temp] | ||
# [START bigquery_auth_drive_scope] | ||
from google.cloud import bigquery | ||
import google.auth | ||
|
||
# Create credentials with Drive & BigQuery API scopes. | ||
# Both APIs must be enabled for your project before running this code. | ||
credentials, project = google.auth.default( | ||
scopes=[ | ||
"https://www.googleapis.com/auth/drive", | ||
"https://www.googleapis.com/auth/bigquery", | ||
] | ||
) | ||
|
||
# TODO(developer): Construct a BigQuery client object. | ||
client = bigquery.Client(credentials=credentials, project=project) | ||
# [END bigquery_auth_drive_scope] | ||
|
||
# Configure the external data source and query job. | ||
external_config = bigquery.ExternalConfig("GOOGLE_SHEETS") | ||
|
||
# Use a shareable link or grant viewing access to the email address you | ||
# used to authenticate with BigQuery (this example Sheet is public). | ||
sheet_url = ( | ||
"https://docs.google.com/spreadsheets" | ||
"/d/1i_QCL-7HcSyUZmIbP9E6lO_T5u3HnpLe7dnpHaijg_E/edit?usp=sharing" | ||
) | ||
external_config.source_uris = [sheet_url] | ||
external_config.schema = [ | ||
bigquery.SchemaField("name", "STRING"), | ||
bigquery.SchemaField("post_abbr", "STRING"), | ||
] | ||
external_config.options.skip_leading_rows = 1 # Optionally skip header row. | ||
external_config.options.range = ( | ||
"us-states!A20:B49" | ||
) # Optionally set range of the sheet to query from. | ||
table_id = "us_states" | ||
job_config = bigquery.QueryJobConfig() | ||
job_config.table_definitions = {table_id: external_config} | ||
|
||
# Example query to find states starting with "W". | ||
sql = 'SELECT * FROM `{}` WHERE name LIKE "W%"'.format(table_id) | ||
query_job = client.query(sql, job_config=job_config) # Make an API request. | ||
|
||
# Wait for the query to complete. | ||
w_states = list(query_job) | ||
print( | ||
"There are {} states with names starting with W in the selected range.".format( | ||
len(w_states) | ||
) | ||
) | ||
# [END bigquery_query_external_sheets_temp] |
25 changes: 25 additions & 0 deletions
25
bigquery/samples/tests/test_query_external_sheets_permanent_table.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
# Copyright 2019 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 | ||
# | ||
# https://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. | ||
|
||
|
||
from .. import query_external_sheets_permanent_table | ||
|
||
|
||
def test_query_external_sheets_permanent_table(capsys, dataset_id): | ||
|
||
query_external_sheets_permanent_table.query_external_sheets_permanent_table( | ||
dataset_id | ||
) | ||
out, err = capsys.readouterr() | ||
assert "There are 2 states with names starting with W in the selected range." in out |
23 changes: 23 additions & 0 deletions
23
bigquery/samples/tests/test_query_external_sheets_temporary_table.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
# Copyright 2019 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 | ||
# | ||
# https://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. | ||
|
||
|
||
from .. import query_external_sheets_temporary_table | ||
|
||
|
||
def test_query_external_sheets_temporary_table(capsys): | ||
|
||
query_external_sheets_temporary_table.query_external_sheets_temporary_table() | ||
out, err = capsys.readouterr() | ||
assert "There are 2 states with names starting with W in the selected range." in out |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters