pybigquery


Namepybigquery JSON
Version 0.10.2 PyPI version JSON
download
home_pagehttps://github.com/googleapis/python-bigquery-sqlalchemy
SummaryOBSOLETE SQLAlchemy dialect for BigQuery
upload_time2021-08-19 20:44:55
maintainer
docs_urlNone
authorThe PyBigQuery Authors
requires_python>=3.6, <3.10
license
keywords bigquery sqlalchemy
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage
            SQLAlchemy Dialect for BigQuery
===============================

.. attention::
   pybigquery is **obsolete**.  Use `sqlalchemy-bigquery
   <https://pypi.org/project/sqlalchemy-bigquery/>`_ instead.  All
   future changes will be made to sqlalchemy-bigquery.

|obsolete| |pypi| |versions|

`SQLALchemy Dialects`_

- `Dialect Documentation`_
- `Product Documentation`_

.. |obsolete| image:: https://img.shields.io/badge/support-obsolete-orange.svg
.. |pypi| image:: https://img.shields.io/pypi/v/pybigquery.svg
   :target: https://pypi.org/project/pybigquery/
.. |versions| image:: https://img.shields.io/pypi/pyversions/pybigquery.svg
   :target: https://pypi.org/project/pybigquery/
.. _SQLAlchemy Dialects: https://docs.sqlalchemy.org/en/14/dialects/
.. _Dialect Documentation: https://googleapis.dev/python/pybigquery/latest
.. _Product Documentation: https://cloud.google.com/bigquery/docs/


Quick Start
-----------

In order to use this library, you first need to go through the following steps:

1. `Select or create a Cloud Platform project.`_
2. [Optional] `Enable billing for your project.`_
3. `Enable the BigQuery Storage API.`_
4. `Setup Authentication.`_

.. _Select or create a Cloud Platform project.: https://console.cloud.google.com/project
.. _Enable billing for your project.: https://cloud.google.com/billing/docs/how-to/modify-project#enable_billing_for_a_project
.. _Enable the BigQuery Storage API.: https://console.cloud.google.com/apis/library/bigquery.googleapis.com
.. _Setup Authentication.: https://googleapis.dev/python/google-api-core/latest/auth.html

Installation
------------

Install this library in a `virtualenv`_ using pip. `virtualenv`_ is a tool to
create isolated Python environments. The basic problem it addresses is one of
dependencies and versions, and indirectly permissions.

With `virtualenv`_, it's possible to install this library without needing system
install permissions, and without clashing with the installed system
dependencies.

.. _`virtualenv`: https://virtualenv.pypa.io/en/latest/


Supported Python Versions
^^^^^^^^^^^^^^^^^^^^^^^^^
Python >= 3.6

Unsupported Python Versions
^^^^^^^^^^^^^^^^^^^^^^^^^^^
Python <= 3.5.


Mac/Linux
^^^^^^^^^

.. code-block:: console

    pip install virtualenv
    virtualenv <your-env>
    source <your-env>/bin/activate
    <your-env>/bin/pip install pybigquery


Windows
^^^^^^^

.. code-block:: console

    pip install virtualenv
    virtualenv <your-env>
    <your-env>\Scripts\activate
    <your-env>\Scripts\pip.exe install pybigquery

Usage
-----

SQLAlchemy
^^^^^^^^^^

.. code-block:: python

    from sqlalchemy import *
    from sqlalchemy.engine import create_engine
    from sqlalchemy.schema import *
    engine = create_engine('bigquery://project')
    table = Table('dataset.table', MetaData(bind=engine), autoload=True)
    print(select([func.count('*')], from_obj=table).scalar())

API Client
^^^^^^^^^^

.. code-block:: python

    from pybigquery.api import ApiClient
    api_client = ApiClient()
    print(api_client.dry_run_query(query=sqlstr).total_bytes_processed)

Project
^^^^^^^

``project`` in ``bigquery://project`` is used to instantiate BigQuery client with the specific project ID. To infer project from the environment, use ``bigquery://`` – without ``project``

Authentication
^^^^^^^^^^^^^^

Follow the `Google Cloud library guide <https://google-cloud-python.readthedocs.io/en/latest/core/auth.html>`_ for authentication. Alternatively, you can provide the path to a service account JSON file in ``create_engine()``:

.. code-block:: python

    engine = create_engine('bigquery://', credentials_path='/path/to/keyfile.json')


Location
^^^^^^^^

To specify location of your datasets pass ``location`` to ``create_engine()``:

.. code-block:: python

    engine = create_engine('bigquery://project', location="asia-northeast1")


Table names
^^^^^^^^^^^

To query tables from non-default projects or datasets, use the following format for the SQLAlchemy schema name: ``[project.]dataset``, e.g.:

.. code-block:: python

    # If neither dataset nor project are the default
    sample_table_1 = Table('natality', schema='bigquery-public-data.samples')
    # If just dataset is not the default
    sample_table_2 = Table('natality', schema='bigquery-public-data')

Batch size
^^^^^^^^^^

By default, ``arraysize`` is set to ``5000``. ``arraysize`` is used to set the batch size for fetching results. To change it, pass ``arraysize`` to ``create_engine()``:

.. code-block:: python

    engine = create_engine('bigquery://project', arraysize=1000)

Page size for dataset.list_tables
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

By default, ``list_tables_page_size`` is set to ``1000``. ``list_tables_page_size`` is used to set the max_results for `dataset.list_tables`_ operation. To change it, pass ``list_tables_page_size`` to ``create_engine()``:

.. _`dataset.list_tables`: https://cloud.google.com/bigquery/docs/reference/rest/v2/tables/list
.. code-block:: python

    engine = create_engine('bigquery://project', list_tables_page_size=100)

Adding a Default Dataset
^^^^^^^^^^^^^^^^^^^^^^^^

If you want to have the ``Client`` use a default dataset, specify it as the "database" portion of the connection string.

.. code-block:: python

    engine = create_engine('bigquery://project/dataset')

When using a default dataset, don't include the dataset name in the table name, e.g.:

.. code-block:: python

    table = Table('table_name')

Note that specifying a default dataset doesn't restrict execution of queries to that particular dataset when using raw queries, e.g.:

.. code-block:: python

    # Set default dataset to dataset_a
    engine = create_engine('bigquery://project/dataset_a')

    # This will still execute and return rows from dataset_b
    engine.execute('SELECT * FROM dataset_b.table').fetchall()


Connection String Parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^

There are many situations where you can't call ``create_engine`` directly, such as when using tools like `Flask SQLAlchemy <http://flask-sqlalchemy.pocoo.org/2.3/>`_. For situations like these, or for situations where you want the ``Client`` to have a `default_query_job_config <https://googlecloudplatform.github.io/google-cloud-python/latest/bigquery/generated/google.cloud.bigquery.client.Client.html#google.cloud.bigquery.client.Client>`_, you can pass many arguments in the query of the connection string.

The ``credentials_path``, ``credentials_info``, ``location``, ``arraysize`` and ``list_tables_page_size`` parameters are used by this library, and the rest are used to create a `QueryJobConfig <https://googlecloudplatform.github.io/google-cloud-python/latest/bigquery/generated/google.cloud.bigquery.job.QueryJobConfig.html#google.cloud.bigquery.job.QueryJobConfig>`_

Note that if you want to use query strings, it will be more reliable if you use three slashes, so ``'bigquery:///?a=b'`` will work reliably, but ``'bigquery://?a=b'`` might be interpreted as having a "database" of ``?a=b``, depending on the system being used to parse the connection string.

Here are examples of all the supported arguments. Any not present are either for legacy sql (which isn't supported by this library), or are too complex and are not implemented.

.. code-block:: python

    engine = create_engine(
        'bigquery://some-project/some-dataset' '?'
        'credentials_path=/some/path/to.json' '&'
        'location=some-location' '&'
        'arraysize=1000' '&'
        'list_tables_page_size=100' '&'
        'clustering_fields=a,b,c' '&'
        'create_disposition=CREATE_IF_NEEDED' '&'
        'destination=different-project.different-dataset.table' '&'
        'destination_encryption_configuration=some-configuration' '&'
        'dry_run=true' '&'
        'labels=a:b,c:d' '&'
        'maximum_bytes_billed=1000' '&'
        'priority=INTERACTIVE' '&'
        'schema_update_options=ALLOW_FIELD_ADDITION,ALLOW_FIELD_RELAXATION' '&'
        'use_query_cache=true' '&'
        'write_disposition=WRITE_APPEND'
    )


Creating tables
^^^^^^^^^^^^^^^

To add metadata to a table:

.. code-block:: python

    table = Table('mytable', ..., bigquery_description='my table description', bigquery_friendly_name='my table friendly name')

To add metadata to a column:

.. code-block:: python

    Column('mycolumn', doc='my column description')



            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/googleapis/python-bigquery-sqlalchemy",
    "name": "pybigquery",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.6, <3.10",
    "maintainer_email": "",
    "keywords": "bigquery,sqlalchemy",
    "author": "The PyBigQuery Authors",
    "author_email": "googleapis-packages@google.com",
    "download_url": "https://files.pythonhosted.org/packages/9a/e0/c49adc50ab6853308c87ba218396a90cbba8ee28da08b66c22900b416054/pybigquery-0.10.2.tar.gz",
    "platform": "Posix; MacOS X; Windows",
    "description": "SQLAlchemy Dialect for BigQuery\n===============================\n\n.. attention::\n   pybigquery is **obsolete**.  Use `sqlalchemy-bigquery\n   <https://pypi.org/project/sqlalchemy-bigquery/>`_ instead.  All\n   future changes will be made to sqlalchemy-bigquery.\n\n|obsolete| |pypi| |versions|\n\n`SQLALchemy Dialects`_\n\n- `Dialect Documentation`_\n- `Product Documentation`_\n\n.. |obsolete| image:: https://img.shields.io/badge/support-obsolete-orange.svg\n.. |pypi| image:: https://img.shields.io/pypi/v/pybigquery.svg\n   :target: https://pypi.org/project/pybigquery/\n.. |versions| image:: https://img.shields.io/pypi/pyversions/pybigquery.svg\n   :target: https://pypi.org/project/pybigquery/\n.. _SQLAlchemy Dialects: https://docs.sqlalchemy.org/en/14/dialects/\n.. _Dialect Documentation: https://googleapis.dev/python/pybigquery/latest\n.. _Product Documentation: https://cloud.google.com/bigquery/docs/\n\n\nQuick Start\n-----------\n\nIn order to use this library, you first need to go through the following steps:\n\n1. `Select or create a Cloud Platform project.`_\n2. [Optional] `Enable billing for your project.`_\n3. `Enable the BigQuery Storage API.`_\n4. `Setup Authentication.`_\n\n.. _Select or create a Cloud Platform project.: https://console.cloud.google.com/project\n.. _Enable billing for your project.: https://cloud.google.com/billing/docs/how-to/modify-project#enable_billing_for_a_project\n.. _Enable the BigQuery Storage API.: https://console.cloud.google.com/apis/library/bigquery.googleapis.com\n.. _Setup Authentication.: https://googleapis.dev/python/google-api-core/latest/auth.html\n\nInstallation\n------------\n\nInstall this library in a `virtualenv`_ using pip. `virtualenv`_ is a tool to\ncreate isolated Python environments. The basic problem it addresses is one of\ndependencies and versions, and indirectly permissions.\n\nWith `virtualenv`_, it's possible to install this library without needing system\ninstall permissions, and without clashing with the installed system\ndependencies.\n\n.. _`virtualenv`: https://virtualenv.pypa.io/en/latest/\n\n\nSupported Python Versions\n^^^^^^^^^^^^^^^^^^^^^^^^^\nPython >= 3.6\n\nUnsupported Python Versions\n^^^^^^^^^^^^^^^^^^^^^^^^^^^\nPython <= 3.5.\n\n\nMac/Linux\n^^^^^^^^^\n\n.. code-block:: console\n\n    pip install virtualenv\n    virtualenv <your-env>\n    source <your-env>/bin/activate\n    <your-env>/bin/pip install pybigquery\n\n\nWindows\n^^^^^^^\n\n.. code-block:: console\n\n    pip install virtualenv\n    virtualenv <your-env>\n    <your-env>\\Scripts\\activate\n    <your-env>\\Scripts\\pip.exe install pybigquery\n\nUsage\n-----\n\nSQLAlchemy\n^^^^^^^^^^\n\n.. code-block:: python\n\n    from sqlalchemy import *\n    from sqlalchemy.engine import create_engine\n    from sqlalchemy.schema import *\n    engine = create_engine('bigquery://project')\n    table = Table('dataset.table', MetaData(bind=engine), autoload=True)\n    print(select([func.count('*')], from_obj=table).scalar())\n\nAPI Client\n^^^^^^^^^^\n\n.. code-block:: python\n\n    from pybigquery.api import ApiClient\n    api_client = ApiClient()\n    print(api_client.dry_run_query(query=sqlstr).total_bytes_processed)\n\nProject\n^^^^^^^\n\n``project`` in ``bigquery://project`` is used to instantiate BigQuery client with the specific project ID. To infer project from the environment, use ``bigquery://`` \u2013\u00a0without ``project``\n\nAuthentication\n^^^^^^^^^^^^^^\n\nFollow the `Google Cloud library guide <https://google-cloud-python.readthedocs.io/en/latest/core/auth.html>`_ for authentication. Alternatively, you can provide the path to a service account JSON file in ``create_engine()``:\n\n.. code-block:: python\n\n    engine = create_engine('bigquery://', credentials_path='/path/to/keyfile.json')\n\n\nLocation\n^^^^^^^^\n\nTo specify location of your datasets pass ``location`` to ``create_engine()``:\n\n.. code-block:: python\n\n    engine = create_engine('bigquery://project', location=\"asia-northeast1\")\n\n\nTable names\n^^^^^^^^^^^\n\nTo query tables from non-default projects or datasets, use the following format for the SQLAlchemy schema name: ``[project.]dataset``, e.g.:\n\n.. code-block:: python\n\n    # If neither dataset nor project are the default\n    sample_table_1 = Table('natality', schema='bigquery-public-data.samples')\n    # If just dataset is not the default\n    sample_table_2 = Table('natality', schema='bigquery-public-data')\n\nBatch size\n^^^^^^^^^^\n\nBy default, ``arraysize`` is set to ``5000``. ``arraysize`` is used to set the batch size for fetching results. To change it, pass ``arraysize`` to ``create_engine()``:\n\n.. code-block:: python\n\n    engine = create_engine('bigquery://project', arraysize=1000)\n\nPage size for dataset.list_tables\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nBy default, ``list_tables_page_size`` is set to ``1000``. ``list_tables_page_size`` is used to set the max_results for `dataset.list_tables`_ operation. To change it, pass ``list_tables_page_size`` to ``create_engine()``:\n\n.. _`dataset.list_tables`: https://cloud.google.com/bigquery/docs/reference/rest/v2/tables/list\n.. code-block:: python\n\n    engine = create_engine('bigquery://project', list_tables_page_size=100)\n\nAdding a Default Dataset\n^^^^^^^^^^^^^^^^^^^^^^^^\n\nIf you want to have the ``Client`` use a default dataset, specify it as the \"database\" portion of the connection string.\n\n.. code-block:: python\n\n    engine = create_engine('bigquery://project/dataset')\n\nWhen using a default dataset, don't include the dataset name in the table name, e.g.:\n\n.. code-block:: python\n\n    table = Table('table_name')\n\nNote that specifying a default dataset doesn't restrict execution of queries to that particular dataset when using raw queries, e.g.:\n\n.. code-block:: python\n\n    # Set default dataset to dataset_a\n    engine = create_engine('bigquery://project/dataset_a')\n\n    # This will still execute and return rows from dataset_b\n    engine.execute('SELECT * FROM dataset_b.table').fetchall()\n\n\nConnection String Parameters\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nThere are many situations where you can't call ``create_engine`` directly, such as when using tools like `Flask SQLAlchemy <http://flask-sqlalchemy.pocoo.org/2.3/>`_. For situations like these, or for situations where you want the ``Client`` to have a `default_query_job_config <https://googlecloudplatform.github.io/google-cloud-python/latest/bigquery/generated/google.cloud.bigquery.client.Client.html#google.cloud.bigquery.client.Client>`_, you can pass many arguments in the query of the connection string.\n\nThe ``credentials_path``, ``credentials_info``, ``location``, ``arraysize`` and ``list_tables_page_size`` parameters are used by this library, and the rest are used to create a `QueryJobConfig <https://googlecloudplatform.github.io/google-cloud-python/latest/bigquery/generated/google.cloud.bigquery.job.QueryJobConfig.html#google.cloud.bigquery.job.QueryJobConfig>`_\n\nNote that if you want to use query strings, it will be more reliable if you use three slashes, so ``'bigquery:///?a=b'`` will work reliably, but ``'bigquery://?a=b'`` might be interpreted as having a \"database\" of ``?a=b``, depending on the system being used to parse the connection string.\n\nHere are examples of all the supported arguments. Any not present are either for legacy sql (which isn't supported by this library), or are too complex and are not implemented.\n\n.. code-block:: python\n\n    engine = create_engine(\n        'bigquery://some-project/some-dataset' '?'\n        'credentials_path=/some/path/to.json' '&'\n        'location=some-location' '&'\n        'arraysize=1000' '&'\n        'list_tables_page_size=100' '&'\n        'clustering_fields=a,b,c' '&'\n        'create_disposition=CREATE_IF_NEEDED' '&'\n        'destination=different-project.different-dataset.table' '&'\n        'destination_encryption_configuration=some-configuration' '&'\n        'dry_run=true' '&'\n        'labels=a:b,c:d' '&'\n        'maximum_bytes_billed=1000' '&'\n        'priority=INTERACTIVE' '&'\n        'schema_update_options=ALLOW_FIELD_ADDITION,ALLOW_FIELD_RELAXATION' '&'\n        'use_query_cache=true' '&'\n        'write_disposition=WRITE_APPEND'\n    )\n\n\nCreating tables\n^^^^^^^^^^^^^^^\n\nTo add metadata to a table:\n\n.. code-block:: python\n\n    table = Table('mytable', ..., bigquery_description='my table description', bigquery_friendly_name='my table friendly name')\n\nTo add metadata to a column:\n\n.. code-block:: python\n\n    Column('mycolumn', doc='my column description')\n\n\n",
    "bugtrack_url": null,
    "license": "",
    "summary": "OBSOLETE SQLAlchemy dialect for BigQuery",
    "version": "0.10.2",
    "project_urls": {
        "Homepage": "https://github.com/googleapis/python-bigquery-sqlalchemy"
    },
    "split_keywords": [
        "bigquery",
        "sqlalchemy"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "2e6b3c79ee340bfe3be806abcb65b81403ca0a4200a36d1fdcb05cc92741a96d",
                "md5": "927bed8be0bd3edf92c03e67fc0804fd",
                "sha256": "de644d6fa916f4fbe824641588ae3fa78743daf72d359acd2f76b5cd141a9f33"
            },
            "downloads": -1,
            "filename": "pybigquery-0.10.2-py2.py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "927bed8be0bd3edf92c03e67fc0804fd",
            "packagetype": "bdist_wheel",
            "python_version": "py2.py3",
            "requires_python": ">=3.6, <3.10",
            "size": 23097,
            "upload_time": "2021-08-19T20:44:51",
            "upload_time_iso_8601": "2021-08-19T20:44:51.018818Z",
            "url": "https://files.pythonhosted.org/packages/2e/6b/3c79ee340bfe3be806abcb65b81403ca0a4200a36d1fdcb05cc92741a96d/pybigquery-0.10.2-py2.py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "9ae0c49adc50ab6853308c87ba218396a90cbba8ee28da08b66c22900b416054",
                "md5": "2587b89ba68adb758fba8b53b650a6d7",
                "sha256": "d9e9f86ab96eb604633eb92cda5d9f1e8c034369e783fdc8222143bb841e68c8"
            },
            "downloads": -1,
            "filename": "pybigquery-0.10.2.tar.gz",
            "has_sig": false,
            "md5_digest": "2587b89ba68adb758fba8b53b650a6d7",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.6, <3.10",
            "size": 83236,
            "upload_time": "2021-08-19T20:44:55",
            "upload_time_iso_8601": "2021-08-19T20:44:55.274785Z",
            "url": "https://files.pythonhosted.org/packages/9a/e0/c49adc50ab6853308c87ba218396a90cbba8ee28da08b66c22900b416054/pybigquery-0.10.2.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2021-08-19 20:44:55",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "googleapis",
    "github_project": "python-bigquery-sqlalchemy",
    "travis_ci": false,
    "coveralls": true,
    "github_actions": false,
    "lcname": "pybigquery"
}
        
Elapsed time: 0.21882s