Bigquery for sqlalchemy

sqlalchemy_bigquer的Python项目详细描述


bigquery实现了一个类似于sql的dsl,但有一些特殊之处:

  1. 它有一个“group each by”提示,用于对大量数据进行分组
  2. 当在一个大于少量兆字节的表上进行连接时,需要使用“join each…on”表单。
  3. 不能引用列,但可以引用表。但可能不是表别名。
  4. 因为不能引用列,所以只能使用不带空格的列,只能使用带下划线的字母数字字符,并且只能以字母或下划线开头的列

前两个问题(用于分组和联接的非标准“each”修饰符)尚未解决。bigquery将何时识别表对于某些操作来说太大的责任推给您,并在您想要使用这些修饰符时将负担转移到您身上。有时候你需要它们,有时候你不需要。把这个作为练习留给用户,让他们用字符串替换这个方言返回的内容。

用法

当前不支持使用sqlalchemy连接到 大查询。目前只支持生成要发送的sql 在定期的服务电话中。

要安装:

pip install sqlalchemy-bigquery

用法示例:

>>> import sqlalchemy.sql as sql
>>>
>>> from sqlalchemy import func
>>> import sqlalchemy_bigquery.base as bq
>>>
>>>
>>> country = sql.column("country")
>>> fruit_type = sql.column("fruit_type")
>>> calories = sql.column("calories")
>>> total_usa = func.sum(
...     sql.case(
...         [(country == "usa", 1)],
...         else_=0
...     )
... ).label("Total_in_USA")
>>> total_japan = func.sum(
...     sql.case(
...         [(country == "japan", 1)],
...         else_=0
...     )
... ).label("Total_in_Japan")
>>> s = sql.select([
...     fruit_type,
...     total_usa,
...     total_japan,
... ]).select_from(sql.table("fruit.table")
... ).group_by(
...     fruit_type
... ).compile(
...     compile_kwargs={"literal_binds": True},
...     dialect=bq.BQDialect()
... )
>>> print str(s)
SELECT fruit_type, sum(CASE WHEN (country = 'usa') THEN 1 ELSE 0 END) AS Total_in_USA, sum(CASE WHEN (country = 'japan') THEN 1 ELSE 0 END) AS Total_in_Japan
FROM [fruit.table] GROUP BY fruit_type

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Jetty是否有请求缓存?   数组中的java 2值与我的数据帧中的2列对应   对象序列化期间的java DbUtils类型转换问题   java根面板中不显示所有单独的面板   java通过代理或SSH隧道连接Hbase API   java困惑:与经典MVC控制器相比,JSF2中bean的角色   java在我的Triangle类中“找不到符号错误”   java在Android中设置从路径到自定义按钮的图像   java不绕轨道旋转椭圆   AES在socket上搞砸了序列化/反序列化。无效的流标头。JAVA   java在数组中搜索term和if语句   线程“main”java中出现异常。util。正则表达式。PatternSyntaxException:在索引0附近悬挂元字符“*”*   Websphere上的java Google反射无法打开url连接   java为什么inc/dec频道什么都不做?   java KeyListener无法访问keyPressed方法