在AWS DynamoDB中使用JOIN查询使用PHP
我目前在PHP中使用MySQL作为我的应用程序的数据库。但现在需要迁移到AWS DynamoDB。 因为我是DynamoDB的新手,任何人都可以帮助我在DynamoDB中使用JOIN?在AWS DynamoDB中使用JOIN查询使用PHP
根据我的发现,我发现JOIN可以使用Hive和Amazon EMR。但是这里还有一个问题,就是没有资源可用于使用Hive和PHP。
喜也许你可以试试这个
要连接两个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
好运气,并尝试
感谢您的帮助,但我已经尝试过这一点。这是蜂巢的语法和我在我的问题已经提到的,可使用蜂巢与PHP没有资源。也进一步的答案,尝试用一个解决方案来,复制粘贴是不是一个答案,我也不会计算器上发布,如果它是这么简单。 – Sanchit
你是在此之后进行数据迁移的目的是什么?或为你的应用程序?
你有没有想要加入的数据的例子?数据建模在SQL和NoSQL数据库之间差别很大,@AndrewTempleton说,你可能需要对数据进行非规范化处理。使用DynamoDB进行建模的关键之一是了解数据的访问模式。将它与数据的逻辑结构相结合,您就可以开始有效地对其进行建模。
如果是用于您的应用程序,您可以创建一个表并将连接表嵌套到父表中 - 因此无需连接任何内容。
如果你继续有两张表,那就没有参照完整性,除非你自己构建它。如果你想加入这两个表格,你需要以编程的方式进行 - 为你的孩子调用(或BatchGetItem)GetItem
的外循环和GetItem
调用的内循环。
或者,您可以保留这两个表并使用DynamoDB流并构建两个表的非规范化“视图”。关于一致性的一些考虑需要思考。
所以,从本质上讲,DynamoDB中的联接只是一些循环。这是非常不同的想法。
如果你想继续在RDBMS的世界里,你有没有考虑RDS为MySQL。
啊,学习两件事的乐趣(迪纳摩_and_ MySQL的)做_one_任务。 –
你可能不应该使用DynamoDB与JOIN要求 - 首先在上传之前,非规范化的数据,继续使用MySQL,或选择另一个数据库,这是更好的JOIN的 –