diff --git a/bigquery/samples/getting_started.py b/bigquery/samples/getting_started.py new file mode 100644 index 000000000000..214e665f0809 --- /dev/null +++ b/bigquery/samples/getting_started.py @@ -0,0 +1,64 @@ +#!/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 most 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()