gpt4 book ai didi

google-bigquery - Google BigQuery/Amazon Redshift 使用基于列的关系数据库还是 NoSQL 数据库?

转载 作者:行者123 更新时间:2023-12-04 09:30:56 25 4
gpt4 key购买 nike

我仍然不太清楚基于列的关系数据库与基于列的 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/

最佳答案

这里需要澄清的一些事情主要是关于 Google BigQuery。

BigQuery 是一个 混合动力允许您将数据存储在列中的系统,但它通过附加功能进入了 NoSQL 世界,例如 record类型,以及 nested特征。您也可以拥有一个 2Mbyte 的 STRING 列,您可以在其中存储原始文档,例如 JSON文档。查看其他 data formats and limits适用。您也可以在 Javascript 中编写用户定义的函数,例如:您可以粘贴到执行 NLP javascript 库的库中。

既然您拥有所有这些功能来存储数据,您就可以使用 JSON Functions例如查询存储在其中一列中的文档,因此这可以用作无模式存储,因为您没有为该列定义 JSON 文档结构,您只是将其存储为 JSON。知道了?

从元列查询的基本示例,它是一个 JSON 文档、原因键,并执行 contains 语言构造以找出该键中有多少用户具有“取消订阅”字样:

SELECT 
SUM(IF(JSON_EXTRACT_SCALAR(meta,'$.reason') contains 'unsubscribed',1,0))
FROM ...

另一方面,您有 table-wildcard querying .如果您的行跨多个表,则需要这样做。表通配符函数是一种从一组特定的表中查询数据的经济高效的方法。当您使用表通配符函数时,BigQuery 只会访问与通配符匹配的表并向您收费。因此,这意味着建议将数据存储在相似的表中,这些表只是在每个设定的时间范围内分区到不同的表中,例如:每日、每月表。

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

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

这从 profile 返回,最后 email每个 user_idtimestamp 的最新条目定义柱子。
SELECT email
FROM
(SELECT email
row_number() over (partition BY user_id
ORDER BY TIMESTAMP DESC) seqnum
FROM [profile]
)
WHERE seqnum=1

关于google-bigquery - Google BigQuery/Amazon Redshift 使用基于列的关系数据库还是 NoSQL 数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28037551/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com