2013-10-16 15 views
6

Facciamo qualche aggregazione su enormi set di dati in Amazon RedShift, e abbiamo una quantità relativamente piccola di dati in MySQL. Per alcuni dei join in RedShift abbiamo bisogno dei dati in MySQL. Qual è il modo migliore per sincronizzare i dati MySql con RedShift? Esiste una cosa simile al redshift come la vista remota dell'oracolo? O dovrei interrogare programmaticamente MySql e inserire/aggiornare in RedShift?Sincronizzare i dati da MySql a Amazon RedShift

risposta

3

Quando i dati MySQL sono necessari per i join in Redshift, di solito li inviamo da uno all'altro.

Implica:

  1. Redshift: Creazione di uno schema tabella analoga (tenendo presente Redshift/particolarità di PSQL)
  2. MySQL: Dumping la tabella di dati (in formato csv)
  3. Zipping l'esportazione, e inviarlo a S3
  4. Redshift: troncamento della tabella, e l'importazione di tutti i dati utilizzando COPIA

Steps Da 2 a 4 possono essere programmati e consentono di inviare nuovi dati a Redshift quando necessario o regolarmente.

7

Redshift supporta ora loading data from remote hosts tramite SSH. Questa tecnica comporta:

  1. Aggiunta la chiave pubblica dal cluster al file authorized_keys sul host remoto (s)
  2. Permettere l'accesso SSH all'host remoto (s) dagli indirizzi IP dei nodi del cluster
  3. Caricamento di un manifest JSON su S3 che specifica l'host remoto, le chiavi pubbliche ei comandi da eseguire sull'host remoto
  4. Esecuzione del comando COPY con un file manifest specificato e le credenziali AWS

Il comando specificato da manifest esegue un comando arbitrario che stampa l'output di testo in un format suitable for ingest mediante il comando Redshift COPY.

-2

Controllare questo simplest way per caricare i dati Mysql su redshift. Quando le tue aspettative si limitano a caricare le istantanee dei dati iniziali su redshift, prova con quella soluzione gratuita. Inoltre otterrete migrazione dello schema, console di query affiancata e alcuni report statistici (con grafico) dell'intero processo di caricamento.

+0

Si prega di non inviare per promuovere il tuo post, che non ha soluzione, ma solo un riferimento. Questo non è un portale di lead generation. – lazywiz

0

Che cos'è la "vista remota" in Oracle?

In ogni caso, se è possibile estrarre i dati dalla tabella al file CSV, è disponibile un'altra opzione di script. È possibile utilizzare la combo Python/boto/psycopg2 per eseguire lo script del carico CSV su Amazon Redshift.

Nel mio MySQL_To_Redshift_Loader faccio la seguente:

  1. Estrarre dati da MySQL in file temporaneo.

    loadConf=[ db_client_dbshell ,'-u', opt.mysql_user,'-p%s' % opt.mysql_pwd,'-D',opt.mysql_db_name, '-h', opt.mysql_db_server]  
    ... 
    q=""" 
    %s %s 
    INTO OUTFILE '%s' 
    FIELDS TERMINATED BY '%s' 
    ENCLOSED BY '%s' 
    LINES TERMINATED BY '\r\n'; 
    """ % (in_qry, limit, out_file, opt.mysql_col_delim,opt.mysql_quote) 
    p1 = Popen(['echo', q], stdout=PIPE,stderr=PIPE,env=env) 
    p2 = Popen(loadConf, stdin=p1.stdout, stdout=PIPE,stderr=PIPE) 
    ... 
    
  2. Comprimere e caricare i dati a S3 utilizzando boto modulo Python e di upload più parti.

    conn = boto.connect_s3(AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY) 
    bucket = conn.get_bucket(bucket_name) 
    k = Key(bucket) 
    k.key = s3_key_name 
    k.set_contents_from_file(file_handle, cb=progress, num_cb=20, 
    reduced_redundancy=use_rr) 
    
  3. Utilizzare il comando COPY psycopg2 per aggiungere dati al redshift tavolo.

    sql=""" 
    copy %s from '%s' 
    CREDENTIALS 'aws_access_key_id=%s;aws_secret_access_key=%s' 
    DELIMITER '%s' 
    FORMAT CSV %s 
    %s 
    %s 
    %s;""" % (opt.to_table, fn, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY,opt.delim,quote,gzip, timeformat, ignoreheader)