From 8ac8bcdae8de8f164505cb787de31a28ec941da1 Mon Sep 17 00:00:00 2001 From: Jerjou Cheng Date: Fri, 4 Sep 2015 15:41:14 -0700 Subject: [PATCH] Move getting started into repo. Modified to use Application Default Credentials, and query shakespeare, so as not to incur as much cost for users trying this out. --- bigquery/samples/getting_started.py | 66 ++++++++++++++++++++++++++ bigquery/tests/test_getting_started.py | 32 +++++++++++++ 2 files changed, 98 insertions(+) create mode 100644 bigquery/samples/getting_started.py create mode 100644 bigquery/tests/test_getting_started.py diff --git a/bigquery/samples/getting_started.py b/bigquery/samples/getting_started.py new file mode 100644 index 000000000000..94aec36e41e2 --- /dev/null +++ b/bigquery/samples/getting_started.py @@ -0,0 +1,66 @@ +#!/usr/bin/env python + +# Copyright 2015, Google, Inc. +# 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. + +"""Sample for making BigQuery queries using the python sdk. + +This is a command-line script that queries a public shakespeare dataset, and +displays the 10 of Shakespeare's works with the greatest number of distinct +words. +""" +# [START all] +from apiclient.discovery import build +from apiclient.errors import HttpError + +from oauth2client.client import GoogleCredentials + + +def main(project_id): + # [START build_service] + # Grab the application's default credentials from the environment. + credentials = GoogleCredentials.get_application_default() + # Construct the service object for interacting with the BigQuery API. + bigquery_service = build('bigquery', 'v2', credentials=credentials) + # [END build_service] + + try: + # [START run_query] + query_request = bigquery_service.jobs() + query_data = { + 'query': ('SELECT TOP(corpus, 10) as title, ' + 'COUNT(*) as unique_words ' + 'FROM [publicdata:samples.shakespeare];') + } + + query_response = query_request.query( + projectId=project_id, + body=query_data).execute() + # [END run_query] + + # [START print_results] + print('Query Results:') + for row in query_response['rows']: + print('\t'.join(field['v'] for field in row['f'])) + # [END print_results] + + except HttpError as err: + print('Error: {}'.format(err.content)) + raise err + + +if __name__ == '__main__': + # The id of the project to run queries under. + project_id = input("Enter the project ID: ") + main(project_id) +# [END all] diff --git a/bigquery/tests/test_getting_started.py b/bigquery/tests/test_getting_started.py new file mode 100644 index 000000000000..ee311173a3bf --- /dev/null +++ b/bigquery/tests/test_getting_started.py @@ -0,0 +1,32 @@ +# Copyright 2015, Google, Inc. +# 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. +# +import re +import unittest + +from bigquery.samples import getting_started + +import tests + + +class TestGettingStarted(tests.CloudBaseTest): + def test_main(self): + with tests.capture_stdout() as mock_stdout: + getting_started.main(self.constants['projectId']) + stdout = mock_stdout.getvalue() + self.assertRegexpMatches(stdout, re.compile( + r'Query Results:.hamlet', re.DOTALL)) + + +if __name__ == '__main__': + unittest.main()