2016-01-08 40 views
9

我目前在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的 –

回答

3

喜也許你可以試試這個

要連接兩個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

1

你是在此之後進行數據遷移的目的是什麼?或爲你的應用程序?

你有沒有想要加入的數據的例子?數據建模在SQL和NoSQL數據庫之間差別很大,@AndrewTempleton說,你可能需要對數據進行非規範化處理。使用DynamoDB進行建模的關鍵之一是瞭解數據的訪問模式。將它與數據的邏輯結構相結合,您就可以開始有效地對其進行建模。

如果是用於您的應用程序,您可以創建一個表並將連接表嵌套到父表中 - 因此無需連接任何內容。

如果你繼續有兩張表,那就沒有參照完整性,除非你自己構建它。如果你想加入這兩個表格,你需要以編程的方式進行 - 爲你的孩子調用(或BatchGetItem)GetItem的外循環和GetItem調用的內循環。

或者,您可以保留這兩個表並使用DynamoDB流並構建兩個表的非規範化「視圖」。關於一致性的一些考慮需要思考。

所以,從本質上講,DynamoDB中的聯接只是一些循環。這是非常不同的想法。

如果你想繼續在RDBMS的世界裏,你有沒有考慮RDS爲MySQL。

3

好吧,將sql遷移到NoSQL是一個艱難的決定,您可能想看看this white page以查看您的應用程序是否可以在NoSQL世界中生存下來。