google云python库之上的一系列高级实用程序。

eds的Python项目详细描述


事件传递系统

事件传递系统(eds)库为 使用谷歌云平台

这个库的主要目的是提供一个统一的接口来处理 跨gcp python api范围的域。

< Buff行情>

支持的Python版本:3.6、3.7

尺寸建模

eds是围绕一个维度模型构建的,这是一种为数据查询而优化的数据设计技术。 它特别适合查询非常大的排序数据集。

维度模型不同于传统的实体关系模型。 维度模型被非规范化为第二种标准形式,每个事实表(度量)都有一个 与上下文(维度)的一对多关系。

维度模型记录了一系列事实,这些事实被已知的上下文所包围 在测量时为真。

尺寸有三种:

  • 模型维度:它们反映了域设计中定义的操作实体。 例如,处理汽车租赁的软件可能会定义一个car实体, 以及一些用来记录客户的用户实体。这些类通常是模型维度, 或者只是尺寸(d)。它们存在于bigquery、cloudsql和数据存储中。
  • 退化维度:仅与事实一起存在的维度称为退化维度 尺寸(DD)。例如,将租来的汽车归还车站时,其状态只能是 车还回来的时候就知道了。这些DDS仅存在于数据存储中。
  • 生成维度:这些是静态维度,我们为它们生成一组数据。 例如,时间是确定的,永远不会改变。生成尺寸(GD) 在bigquery、cloudsql和数据存储中预填充。

模式定义

维度和事实是使用yaml格式的schema.yaml文件定义的。

< Buff行情>

默认情况下,此文件在调用脚本的根目录中查找。 这可以通过设置环境变量来覆盖。

加载维度和事实:

fromeds.configimportschemaschema.DIMENSIONSschema.FACTS

尺寸

尺寸在尺寸全局部分下定义:

dimensions:-name:DimensionKindkey:dimension_idancestor:kind:ParentKindlookup:"{parent_id}"relatives:-kind:RelativeKindlookup:"{relative_id}"-kind:SecondRelativeKindlookup:"{second_relative_id}"model_based:truekey_field:dimension_keyid_fields:-dimension_idindex_fields:-dimension_idschema:-{name:dimension_key, type:INTEGER, mode:REQUIRED}-{name:dimension_id, type:INTEGER}-{name:dimension_name, type:STRING}-{name:archived, type:BOOLEAN}-{name:timestamp, type:TIMESTAMP}

维度具有以下参数:

  • 名称-数据存储种类
  • -用于唯一标识维度的ID。它也被用作 在bigquery和cloudsql中创建的表。
  • 祖先-为了确保数据存储的强一致性,在 实体组。此字段定义此组的种类,以及如何定位它。 查找字段可以是一个sinple字符串(当祖先是unque时),一个简单的查找模式 (例如:{property},根据属性值定位实体)和多重查找 模式(例如:{property_1},{property_2},根据多个属性定位实体)。 此参数是可选的
  • 亲属-对于依赖于其他关系存在的维度,定义了从属关系 作为亲戚。每个亲戚都有一个查找字段,其含义与 祖先查找。 此参数是可选的
  • 基于模型-定义维度是否基于操作实体的标志。 将此参数设置为false会将维度标记为已生成。 此参数是可选的
  • 键字段-维度的代理键字段的名称。 此参数对于基于模型的尺寸是必需的
  • id_fields-维度的操作ID字段。 此参数对于基于模型的尺寸是必需的
  • 索引字段-要索引的维度字段列表,包括在数据存储区和cloudsql中。 此参数是可选的
  • 架构-维度的字段。 此参数对于基于模型的尺寸是必需的
< Buff行情>

注意,没有模式的基于模型的维度实际上是dd。 而dg通常是非基于模型的,并且有一个模式。 当基于模型的

事实

事实在事实全局部分下定义:

facts:-name:factschema:-{name:day_key, type:INTEGER, required:Yes}-{name:time_key, type:INTEGER, required:Yes}-{name:dimension_key, type:INTEGER, required:Yes}-{name:timestamp, type:TIMESTAMP, required:Yes}-{name:fact, type:FLOAT, required:Yes}

事实有以下参数:

  • 名称-bigquery中使用的名称。
  • 模式-事实的字段。
< Buff行情>

注意,事实只存在于bigquery中。

维度数据池

所有生成的模型和维度都存储在数据存储中。 它们最终是如何被另一个子系统处理的,尽管它们必须使用相同的模式 作为bigquery和cloudsql的对应项。每个字段都由一个数据存储实体属性表示。

操作系统正在更新这些维度,需要 定期传播到bigquery和cloudsql。

数据存储祖先和索引

为了保证强写一致性,所有数据存储实体都插入了 父实体。使用父级时,可以执行数据存储祖先查询。

< Buff行情>

参见祖先查询 数据一致性 了解更多信息。

默认情况下,所有实体、属性和祖先(升序和降序)都会创建索引。

大查询

bigquery类是google.cloud.bigquery.client类的简单包装,因此 实例化它不需要任何额外的参数。

bigquery提供基于eds模式创建或重新创建表的帮助程序,以及 更新表的架构。

fromeds.configimportschemafromeds.bigqueryimportBigQuerybigquery=BigQuery()dimension=schema.DIMENSIONS['dimension_id']bigquery.create_table(dataset='dimensions',recreate=False,schema=dimension.schema,table_name=dimension.key)bigquery.update_table(dataset='dimensions',schema=dimension.schema,table_name=dimension.key)

cloudsql

< Buff行情>

注意eds只支持带有mysql的cloudsql。

必须用连接实例化cloudsql类。 连接是一个使用推荐的默认池设置的sqlalchemy包装类 通过GCP。

fromeds.dbimportConnectionfromeds.cloudsqlimportCloudSQLconnection=Connection(db_engine_url='DB_ENGINE_URL')cloudsql=CloudSQL(connection=connection)

cloudsql提供基于eds架构创建或重新创建表的帮助程序。

< Buff行情>

当前不支持更新现有表的架构。

fromeds.configimportschemadimension=schema.DIMENSIONS['dimension_id']cloudsql.create_table(table=dimension.tables[dimension.key],recreate=False)
< Buff行情>

维度的tables属性包括两个sqlalchemytable定义:一个用于表 以维度的键命名,另一个使用后缀命名。

cloudsql/mysql字符集

utf-8支持仅在mysql 5.7之后才可用,并带有utf8mb4字符集。

由于这不是mysql使用的默认字符集,因此必须将其设置为标志:

character_set_server = utf8mb4

为了通过云外壳正确显示所有字符,请记住设置客户端 从mysql控制台将连接字符设置为utf8mb4,使用:

SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci;

将数据加载到维度

数据负载(通常来自存储在数据存储中的维度)可以加载到bigquery和cloudsql 使用bigquerycloudsql类。

payload=[{'dimension_key':123,'dimension_id':364577,'dimension_name':'D123','archived':False,'timestamp':'2018-11-02T12:01:05.571694+00:00',},]bigquery.load(dataset='dimensions',table_name=dimension.key,schema=dimension.schema,payload=payload)cloudsql.load(table=dimension.tables[dimension.key],payload=payload)

有关CloudSQL的说明

任何以\u name结尾的模式字段,如果作为字节接收,则将被编码为utf-8, 在写入cloudsql之前。

在加载之前,所有的时间戳字段都将被删除掉任何后续时区信息 进入cloudsql。时间戳字段应在ISO 8601中。

尺寸更新

a维度更新将使用临时表中的记录更新表中的记录。

fromeds.configimportschemaschema.DIMENSIONSschema.FACTS
0

尺寸插件

a维度插入将从其暂存表中插入不存在于其自身表中的记录。

fromeds.configimportschemaschema.DIMENSIONSschema.FACTS
1

开发

要参与此项目,请安装并运行tox

fromeds.configimportschemaschema.DIMENSIONSschema.FACTS
2

PYPI

该项目是公共索引的根pypi名称空间eds

pypi包可在pypi.python.org/pypi/eds

发布新版本:

fromeds.configimportschemaschema.DIMENSIONSschema.FACTS
3

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

推荐PyPI第三方库


热门话题
java如何删除TextInputLayout提示文本中的省略号(三个点)?   java通过蓝牙编程发送数据   java如何在Opengl ES中获得一个像素的透明颜色?   java如何在添加额外的maven依赖项后更新eclipse项目   Java机器人编程。在拾取和放置任务中移动零件时,如何跟踪零件的属性?   json如何使用Java访问JSONObject中的JSONArray?   Java将列表组的字段(BigDecimal)乘以2个字段求和   Java:从URL下载   java多ajax数据到Spring MVC控制器   java使用Android将文本文件上传到Google Drive   java使用org解析多个模式。三十。英国石油公司。总体安排日期时间格式化程序   安卓 java中的机器人选择测试。lang.NoSuchFieldError:在应用窗口侦听器上标记   BeanPostProcessor的java示例   java为什么这段代码在这里给我一个空异常错误?   java如何解析一个字符串并获得一个子字符串?   java:使用vfs S3插件在AmazonS3中使用服务器端加密