Google BigQuery/Amazon Redshift是否使用基于列的关系数据库或NoSQL数据库?

eri*_*icn 7 relational-database nosql google-bigquery amazon-redshift

我还不是很清楚基于列的关系数据库与基于列的NoSQL数据库之间的区别.

Google BigQuery支持类似SQL的查询,那么它如何成为NoSQL?

我所知道的基于列的关系数据库是InfoBright,Vertica和Sybase IQ.

我所知道的基于列的NoSQL数据库是Cassandra和HBase.

以下关于Redshift的文章以"NoSQL"开头,但以PostgreSQL(关系型)结尾使用:http: //nosqlguide.com/column-store/intro-to-amazon-redshift-a-columnar-nosql-database /

Pen*_*m10 16

这里要说明的一些事情主要是关于Google BigQuery.

BigQuery是一个混合系统,允许您将数据存储在列中,但它通过其他功能(如record类型和nested功能)进入NoSQL世界.您还可以使用2Mbyte STRING列,您可以在其中存储原始文档,如JSON文档.请参阅适用的其他数据格式和限制.您也可以在Javascript中编写用户定义函数,例如:您可以粘贴到执行NLP javascript库的库中.

既然您具有存储数据的所有这些功能,您可以使用JSON函数来查询存储在其中一列中的文档,因此可以将其用作无架构存储,因为您没有为此定义JSON文档结构列,您只是将其存储为JSON.得到它了?

从元列查询的基本示例,它是一个JSON文档,原因键,并执行一个包含语言构造,以找出该键中有多少用户拥有"未订阅"单词:

SELECT 
  SUM(IF(JSON_EXTRACT_SCALAR(meta,'$.reason') contains 'unsubscribed',1,0))  
FROM ...
Run Code Online (Sandbox Code Playgroud)

另一方面,您有表通配符查询.如果您的行跨多个表,则需要这样做.表通配符函数是从一组特定表中查询数据的经济有效的方法.当您使用表通配符函数时,BigQuery仅访问并向您收取与通配符匹配的表的费用.所以这意味着建议将数据存储在类似的表中,这些表只是按照设定的时间范围划分在不同的表中,例如:每日,每月表.

我们不应该忘记BigQuery只是通过设计附加,所以你不能更新旧记录,没有UPDATE语言构造(更新:现在有DML语言构造做一些更新/删除操作).相反,您需要附加一条新记录,并且您的查询必须以始终与最新版本的数据一起使用的方式编写.如果您的系统是事件驱动的,那么这非常简单,因为每个事件都将附加在BQ中.但是如果用户更新了它的配置文件,则需要再次存储配置文件,不能更新旧行.您需要有一个列版本/日期,告诉您哪个是最新版本,并且您的查询将首先写入以获取最新版本的行然后处理逻辑.

您可以使用该字段的over/partition之类的内容并使用最新值seqnum=1.

这将从最新条目按列定义的每个profile最后一个返回.emailuser_idtimestamp

SELECT email
   FROM
     (SELECT email
             row_number() over (partition BY user_id
                                ORDER BY TIMESTAMP DESC) seqnum
      FROM [profile]
    )
   WHERE seqnum=1
Run Code Online (Sandbox Code Playgroud)


Mos*_*sky 5

首先,请记住,NOSQL通常被视为“ Not Only SQL”的缩写,因此,具有SQL接口和某些NOSQL功能的系统没有矛盾。话虽如此,Redshift和BigQuery都基于基于列的数据库。Redshift基于Paraccel,这是针对数据仓库的基于列的经典RDBMS,而BigQuery基于Google内部基于列的数据处理技术,称为“ dremel”。