在AWS DynamoDB中使用JOIN查询使用PHP

问题描述:

我目前在PHP中使用MySQL作为我的应用程序的数据库。但现在需要迁移到AWS DynamoDB。 因为我是DynamoDB的新手,任何人都可以帮助我在DynamoDB中使用JOIN?在AWS DynamoDB中使用JOIN查询使用PHP

根据我的发现,我发现JOIN可以使用Hive和Amazon EMR。但是这里还有一个问题,就是没有资源可用于使用Hive和PHP。

+0

啊,学习两件事的乐趣(迪纳摩_and_ MySQL的)做_one_任务。 –

+0

你可能不应该使用DynamoDB与JOIN要求 - 首先在上传之前,非规范化的数据,继续使用MySQL,或选择另一个数据库,这是更好的JOIN的 –

喜也许你可以试试这个

要连接两个DynamoDB表 的连接的计算集群上,并返回。 DynamoDB中不会发生连接。此示例返回已放置两个以上订单的客户及其采购清单。

CREATE EXTERNAL TABLE hive_purchases(customerId bigint, total_cost double, items_purchased array<String>) 
STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' 
TBLPROPERTIES ("dynamodb.table.name" = "Purchases", 
"dynamodb.column.mapping" = "customerId:CustomerId,total_cost:Cost,items_purchased:Items"); 

CREATE EXTERNAL TABLE hive_customers(customerId bigint, customerName string, customerAddress array<String>) 
STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' 
TBLPROPERTIES ("dynamodb.table.name" = "Customers", 
"dynamodb.column.mapping" = "customerId:CustomerId,customerName:Name,customerAddress:Address"); 

Select c.customerId, c.customerName, count(*) as count from hive_customers c 
JOIN hive_purchases p ON c.customerId=p.customerId 
GROUP BY c.customerId, c.customerName HAVING count > 2; 

为了从不同的来源

在以下示例中连接两个表,Customer_S3是加载存储在Amazon S3和hive_purchases CSV文件一个蜂房表是在DynamoDB该引用的数据。以下示例将存储为Amazon S3中的CSV文件的客户数据与存储在DynamoDB中的订单数据结合在一起,以返回一组数据,这些数据代表名称中包含“Miller”的客户下达的订单。

CREATE EXTERNAL TABLE hive_purchases(客户ID BIGINT,TOTAL_COST双,items_purchased阵列) STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' TBLPROPERTIES( “dynamodb.table.name”= “购买”, “dynamodb.column.mapping”=“customerId:CustomerId,total_cost:Cost,items_purchased:Items”);

CREATE EXTERNAL TABLE Customer_S3(customerId bigint, customerName string, customerAddress array<String>) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' 
LOCATION 's3://bucketname/path/subpath/'; 

Select c.customerId, c.customerName, c.customerAddress from 
Customer_S3 c 
JOIN hive_purchases p 
ON c.customerid=p.customerid 
where c.customerName like '%Miller%'; 

获取更多信息,您可以阅读文档 DynamoDB Export , Import Querys

好运气,并尝试

+1

感谢您的帮助,但我已经尝试过这一点。这是蜂巢的语法和我在我的问题已经提到的,可使用蜂巢与PHP没有资源。也进一步的答案,尝试用一个解决方案来,复制粘贴是不是一个答案,我也不会计算器上发布,如果它是这么简单。 – Sanchit

你是在此之后进行数据迁移的目的是什么?或为你的应用程序?

你有没有想要加入的数据的例子?数据建模在SQL和NoSQL数据库之间差别很大,@AndrewTempleton说,你可能需要对数据进行非规范化处理。使用DynamoDB进行建模的关键之一是了解数据的访问模式。将它与数据的逻辑结构相结合,您就可以开始有效地对其进行建模。

如果是用于您的应用程序,您可以创建一个表并将连接表嵌套到父表中 - 因此无需连接任何内容。

如果你继续有两张表,那就没有参照完整性,除非你自己构建它。如果你想加入这两个表格,你需要以编程的方式进行 - 为你的孩子调用(或BatchGetItem)GetItem的外循环和GetItem调用的内循环。

或者,您可以保留这两个表并使用DynamoDB流并构建两个表的非规范化“视图”。关于一致性的一些考虑需要思考。

所以,从本质上讲,DynamoDB中的联接只是一些循环。这是非常不同的想法。

如果你想继续在RDBMS的世界里,你有没有考虑RDS为MySQL。

好吧,将sql迁移到NoSQL是一个艰难的决定,您可能想看看this white page以查看您的应用程序是否可以在NoSQL世界中生存下来。