def test_from_query_job(self): from google.cloud.bigquery.dataset import Dataset from google.cloud.bigquery.job import QueryJob from google.cloud.bigquery._helpers import UDFResource DS_NAME = 'DATASET' RESOURCE_URI = 'gs://some-bucket/js/lib.js' client = _Client(self.PROJECT) job = QueryJob( self.JOB_NAME, self.QUERY, client, udf_resources=[UDFResource("resourceUri", RESOURCE_URI)]) dataset = job.default_dataset = Dataset(DS_NAME, client) job.use_query_cache = True job.use_legacy_sql = True klass = self._getTargetClass() query = klass.from_query_job(job) self.assertEqual(query.name, self.JOB_NAME) self.assertEqual(query.query, self.QUERY) self.assertIs(query._client, client) self.assertIs(query._job, job) self.assertEqual(query.udf_resources, job.udf_resources) self.assertIs(query.default_dataset, dataset) self.assertTrue(query.use_query_cache) self.assertTrue(query.use_legacy_sql)
def run_async_query(self, job_name, query, udf_resources=(), query_parameters=()): """Construct a job for running a SQL query asynchronously. See https://cloud.google.com/bigquery/docs/reference/rest/v2/jobs#configuration.query :type job_name: str :param job_name: Name of the job. :type query: str :param query: SQL query to be executed :type udf_resources: tuple :param udf_resources: An iterable of :class:`google.cloud.bigquery._helpers.UDFResource` (empty by default) :type query_parameters: tuple :param query_parameters: An iterable of :class:`google.cloud.bigquery._helpers.AbstractQueryParameter` (empty by default) :rtype: :class:`google.cloud.bigquery.job.QueryJob` :returns: a new ``QueryJob`` instance """ return QueryJob(job_name, query, client=self, udf_resources=udf_resources, query_parameters=query_parameters)
def send_to_gcs(self, query, project_id, output_uri, delimiter=","): job_results = {} client = self.bq_client queryJob = QueryJob(self.__create_job_id(project_id, "queryJob"), query, client) job_results["queryJob"] = self.__get_results(queryJob) output_type = output_uri.split(".")[-1] dest_format = self.__get_file_type(output_type) if dest_format == SourceFormat.CSV: config = ExtractJobConfig(destination_format=dest_format, field_delimiter=delimiter) else: config = ExtractJobConfig(destination_format=dest_format) extractJob = ExtractJob(self.__create_job_id(project_id, "extractJob"), queryJob.destination, output_uri, client, job_config=config) job_results["extractJob"] = self.__get_results(extractJob) return job_results
def job(self): """Job instance used to run the query. :rtype: :class:`google.cloud.bigquery.job.QueryJob`, or ``NoneType`` :returns: Job instance used to run the query (None until ``jobReference`` property is set by the server). """ if self._job is None: job_ref = self._properties.get('jobReference') if job_ref is not None: self._job = QueryJob(job_ref['jobId'], self.query, self._client) return self._job
def run_async_query(self, job_name, query): """Construct a job for running a SQL query asynchronously. See: https://cloud.google.com/bigquery/docs/reference/v2/jobs#configuration.query :type job_name: str :param job_name: Name of the job. :type query: str :param query: SQL query to be executed :rtype: :class:`google.cloud.bigquery.job.QueryJob` :returns: a new ``QueryJob`` instance """ return QueryJob(job_name, query, client=self)
def test_from_query_job_wo_default_dataset(self): from google.cloud.bigquery.job import QueryJob from google.cloud.bigquery._helpers import UDFResource RESOURCE_URI = 'gs://some-bucket/js/lib.js' client = _Client(self.PROJECT) job = QueryJob( self.JOB_NAME, self.QUERY, client, udf_resources=[UDFResource("resourceUri", RESOURCE_URI)]) klass = self._getTargetClass() query = klass.from_query_job(job) self.assertEqual(query.query, self.QUERY) self.assertTrue(query._client is client) self.assertTrue(query._job is job) self.assertEqual(query.udf_resources, job.udf_resources) self.assertIsNone(query.default_dataset) self.assertIsNone(query.use_query_cache) self.assertIsNone(query.use_legacy_sql)