1

我需要幫助進入下面的情況。從Mysql到Cassandra的數據遷移

我有一個MySQL表: -

CREATE TABLE employees (
    emp_no  INT    NOT NULL, -- AUTO_INCREMENT?? 
    birth_date DATE   NOT NULL, 
    first_name VARCHAR(14)  NOT NULL, 
    user_id  INT    NOT NULL, -- This is primary key of another table. 
    PRIMARY KEY (emp_no)); 

此表有大約20000條記錄。

我將這個MySQL錶轉移到Cassandra表中,如下所示。

CREATE TABLE employees (
    emp_no  uuid, 
    birth_date timestamp, 
    first_name text, 
    user_id uuid, 
    PRIMARY KEY (emp_no)); 

現在我想從MySQL表導出所有20000條記錄到卡桑德拉表。

user_id列是另一個表中的主鍵,first_name列也與user_id列映射。

請讓我知道我該如何做到這一點。

以下是我正在使用的datastax版本的詳細信息。 [cqlsh 5.0.1 | Cassandra 2.1.15.1403 | DSE 4.8.9 | CQL規範3.2.1 | Native protocol v3]

請建議我以最佳方式將數據從MySQL遷移到Cassandra。

回答

0

上面的datastax場景對您來說太棒了。另一種方法是創建一個小型的Java項目來爲你做。在你的情況下,你的模型從mysql表到cassandra表是相同的。所以,你可以做到以下幾點:

  1. 創建Hibernate的Java項目和datastax司機
  2. 爲員工創造一個Java類
  3. 地圖員工通過Hibernate XML映射到mysql(我喜歡XML,因爲這樣我就可以使用卡桑德拉相同的Java模型)
  4. 地圖員工類卡桑德拉表通過datastax驅動程序註釋
  5. 使用Hibernate的Session,使你的員工分批
  6. 使用datastax驅動程序將批處理中的所有員工保存到cassandra中。

您的員工類應該是這樣的

@Table(keyspace = "your_keyspace", name ="employees") 
public class Employee 
{ 
    @PartitionKey(0) 
    @Column(name = "emp_no") 
    protected UUID employeeNo; 

    @Column(name = "birth_date") 
    protected Timestamp birthDate; 

    @Column(name = "first_name") 
    protected String firstName; 

    @Column(name = "user_id") 
    protected UUID userId; 
} 

當然,Java是不是你唯一的選擇。 Datastax驅動程序可用於許多語言,如C#或python。

+0

如果我們將mysql表導出到EXCEL然後加載到Cassandra表中,這是不可能的。這是一個好主意嗎? 以及失敗的可能情況是什麼。 –

+0

你打算怎麼做?我從來沒有試過這樣填表。你能給我更多的細節嗎? (我還要說,我在上面的答案中描述的方式可以用於未來的表遷移,因此您只需創建一次並在需要時使用它) – Reveka

+0

將您的mysql錶轉換爲csv並導入cassandra – Ish