Ricerca nel sito web

Configurazione di AWS Redshift per il data warehousing nel cloud


Su questa pagina

  1. 1. Come funziona
  2. 2. Fase di configurazione
    1. 2.1 Prerequisito
    2. 2.2 Impostazione della configurazione del Redshift

    In questo tutorial, spiegherò e guiderò come configurare AWS Redshift per utilizzare Cloud Data Warehousing. Redshift è un servizio di data warehouse di petabyte completamente gestito introdotto nel cloud da Amazon Web Services. Funziona combinando una o più raccolte di risorse di calcolo chiamate nodi, organizzate in un gruppo, un cluster. Ogni cluster esegue un motore Redshift e può contenere uno o più database. L'architettura può sostanzialmente essere elaborata come segue:



    1. Come funziona

    Fondamentalmente, Redshift si basa su PostgreSQL come motore principale, quindi la maggior parte delle applicazioni SQL può funzionare con Redshift. Redshift può anche essere integrato con un'ampia gamma di applicazioni tra cui BI, analisi e strumenti ETL (Extract, Transform, Load) che consentono ad analisti o ingegneri di lavorare con i dati in esso contenuti.

    Quando un utente configura un data warehouse di Amazon Redshift, dispone di una topologia di base per le operazioni denominata cluster. Un cluster Redshift è composto da 1 o più nodi di calcolo. Se l'utente sceglie di utilizzare più di un nodo di calcolo, Redshift avvia automaticamente un nodo master. Questo nodo leader è configurato per ricevere richieste e comandi dal lato di esecuzione del client e non viene fatturato da AWS.

    Le applicazioni client comunicano solo con il nodo leader. I nodi di calcolo sotto il nodo leader sono trasparenti per l'utente. Quando i client eseguono una query, il nodo principale analizza la query e crea un piano di esecuzione ottimale per l'esecuzione sui nodi di calcolo, tenendo conto della quantità di dati archiviati su ciascun nodo.

    In questo tutorial, ti mostrerò come impostare e configurare Redhift per il nostro uso. In questo esempio, creerò un account e inizierò con il pacchetto di livello gratuito.

    2. Fase di configurazione

    2.1 Prerequisito

    Prima di iniziare a configurare un cluster Amazon Redshift, è necessario completare un determinato prerequisito.

    Prima registrati ad AWS, quindi una volta terminato, vai al servizio IAM per creare un ruolo che potremmo utilizzare per l'utilizzo di Redshift. Puoi seguire lo screenshot come di seguito:

    Una volta fatto, dovresti ottenere uno screenshot come sotto indicato che il ruolo è stato creato con successo.

    2.2 Impostazione della configurazione del Redshift

    Una volta soddisfatti i prerequisiti, possiamo procedere alla creazione del nostro Redshift Cluster. Cerca le funzionalità di Redshift nel riquadro di ricerca e procedi da lì. Di seguito sono riportati gli esempi di screenshot:

    Fare clic sul pulsante Crea cluster e procedere con le variabili necessarie, notare che sul lato Cluster Permission includiamo il nostro ruolo IAM che abbiamo creato in precedenza.

    Una volta fatto, dovresti finire nella dashboard del redshift come sopra. Per questo tutorial, disabiliteremo il livello di sicurezza della rete modificando il gruppo di sicurezza. Per farlo, vai in fondo alla dashboard e aggiungi la porta Redshift nella scheda In entrata. Di seguito è riportato un esempio:

    Una volta che tutto è stato fatto, dovresti vedere che il nuovo cluster che hai creato è ora disponibile per essere utilizzato.

    3. Fase di test

    Ora proviamo ad accedere al nostro data warehouse. Per provarlo, fai clic su EDITOR nel riquadro di sinistra, includi le variabili necessarie e fai clic su Connetti al database

    Dovresti essere indirizzato a una pagina dell'editor, ora iniziamo creando il nostro schema di test. Crea uno schema come di seguito, quindi eseguilo.

    Fantastico, ora testiamo sul lato locale del client. Per fare ciò, è necessario ottenere una connessione JDBC o ODBC dal lato Redshift. Per ottenere queste informazioni, fai clic sul pulsante Config nel riquadro sinistro della dashboard.

    Scegli il tipo di connessione che preferisci, quindi scarica le librerie necessarie e copia l'URL come mostrato nell'esempio seguente:

    Successivamente, apri uno qualsiasi dei tuoi strumenti client SQL e inserisci le variabili di connessione necessarie. Nel nostro esempio qui, stiamo usando il nome degli strumenti client SQL DBeaver che può ottenere da qui

    La connessione dovrebbe riuscire come previsto. Se in ogni caso ti imbatti in un problema di autenticazione, verifica con la configurazione effettuata nel gruppo di sicurezza AWS per ulteriori dettagli.

    Successivamente, creiamo un insieme di tabelle sotto il nostro precedente schema appena creato. Di seguito è riportato un esempio di creazione di tabelle che eseguiremo nel nostro cluster:

     SET search_path = imdb; 

    create table users(
    userid integer not null distkey sortkey,
    username char(8),
    firstname varchar(30),
    lastname varchar(30),
    city varchar(30),
    state char(2),
    email varchar(100),
    phone char(14),
    likesports boolean,
    liketheatre boolean,
    likeconcerts boolean,
    likejazz boolean,
    likeclassical boolean,
    likeopera boolean,
    likerock boolean,
    likevegas boolean,
    likebroadway boolean,
    likemusicals boolean);

    create table venue(
    venueid smallint not null distkey sortkey,
    venuename varchar(100),
    venuecity varchar(30),
    venuestate char(2),
    venueseats integer);

    create table category(
    catid smallint not null distkey sortkey,
    catgroup varchar(10),
    catname varchar(10),
    catdesc varchar(50));

    create table date(
    dateid smallint not null distkey sortkey,
    caldate date not null,
    day character(3) not null,
    week smallint not null,
    month character(5) not null,
    qtr character(5) not null,
    year smallint not null,
    holiday boolean default('N'));

    create table event(
    eventid integer not null distkey,
    venueid smallint not null,
    catid smallint not null,
    dateid smallint not null sortkey,
    eventname varchar(200),
    starttime timestamp);

    create table listing(
    listid integer not null distkey,
    sellerid integer not null,
    eventid integer not null,
    dateid smallint not null sortkey,
    numtickets smallint not null,
    priceperticket decimal(8,2),
    totalprice decimal(8,2),
    listtime timestamp);

    create table sales(
    salesid integer not null,
    listid integer not null distkey,
    sellerid integer not null,
    buyerid integer not null,
    eventid integer not null,
    dateid smallint not null sortkey,
    qtysold smallint not null,
    pricepaid decimal(8,2),
    commission decimal(8,2),
    saletime timestamp);

    Il risultato previsto verrà mostrato come di seguito: -

    Successivamente, proviamo a caricare i dati di esempio nel nostro data warehouse. Per questo esempio, ho caricato un campione di dati nel mio bucket S3, quindi ho utilizzato lo script seguente per copiare i dati dal file S3 in Redshift.

     
    copy sales from 's3://shahril-redshift01-abcde/sales_tab.txt'
    iam_role 'arn:aws:iam::325581293405:role/shahril-redshift-s3-ro-role'
    delimiter '\t' timeformat 'MM/DD/YYYY HH:MI:SS' region 'eu-west-1';

    copy dates from 's3://shahril-redshift01-abcde/date2008_pipe.txt'
    iam_role 'arn:aws:iam::325581293405:role/shahril-redshift-s3-ro-role'
    delimiter '|' region 'eu-west-1';

    Se in qualsiasi modo durante il caricamento ti imbatti in un problema, puoi eseguire una query dalla tabella del dizionario redshift denominata stl_load_errors come di seguito per ottenere un suggerimento sul problema.

     select * from stl_load_errors ; 

    Infine, una volta fatto tutto, dovresti essere in grado di estrarre e manipolare i dati utilizzando qualsiasi funzione SQL fornita. Di seguito sono riportati alcuni degli script di esempio delle query che ho utilizzato per il nostro esempio.

     
    -- Get definition for the sales table.
    SELECT *
    FROM pg_table_def
    WHERE tablename = 'sales';

    -- Find total sales on each day
    SELECT b.caldate days, sum(a.qtysold) FROM sales a, dates b
    WHERE a.dateid = b.dateid
    group by b.caldate ;

    -- Find top 10 buyers by quantity.
    SELECT firstname, lastname, total_quantity
    FROM (SELECT buyerid, sum(qtysold) total_quantity
    FROM sales
    GROUP BY buyerid
    ORDER BY total_quantity desc limit 10) Q, users
    WHERE Q.buyerid = userid
    ORDER BY Q.total_quantity desc;

    -- Find events in the 99.9 percentile in terms of all time gross sales.
    SELECT eventname, total_price
    FROM (SELECT eventid, total_price, ntile(1000) over(order by total_price desc) as percentile
    FROM (SELECT eventid, sum(pricepaid) total_price
    FROM sales
    GROUP BY eventid)) Q, event E
    WHERE Q.eventid = E.eventid
    AND percentile = 1
    ORDER BY total_price desc;

    Pollice su! ora abbiamo configurato con successo il nostro cluster Redshift per l'utilizzo del data warehousing. Successivamente, esamineremo la combinazione dei dati esistenti in Redshift Cluster con qualsiasi file flat utilizzando Redshift Spectrum.