I en relationell databas är det vanligt att man använder olika SQL-kommandon för att effektivt hämta, filtrera och sortera data. Den grundläggande funktionen för att extrahera information är SELECT-satsen, som används för att välja specifika kolumner från en tabell. Här går vi igenom några av de vanligaste teknikerna som används i SQL för att hantera och optimera datafrågor.
SELECT-satsen är den grundläggande byggstenen i SQL. Syntaxen för en enkel SELECT-fråga är följande:
SELECT column_list FROM table_name;
column_list antingen vara en specifik kolumn eller flera kolumner som separeras med kommatecken. Om man vill hämta alla kolumner från tabellen kan man använda asterisktecknet (*). Men det är god praxis att specifikt ange de kolumner man vill ha, eftersom det gör frågan mer flexibel och effektiv.
För att hämta specifik data från en tabell kan man exempelvis använda följande fråga för att hämta förstnamn från en kundtabell:
SELECT first_name FROM customers;
Här returneras endast kundernas förnamn. På liknande sätt kan man kombinera flera kolumner i en fråga för att hämta mer detaljerad information, till exempel både för- och efternamn:
SELECT first_name, last_name FROM customers;
En annan användbar funktion är att man kan skapa en ny kolumn genom att kombinera data från olika kolumner. Om man vill skapa en fullständig namnsträng från för- och efternamn, kan man använda CONCAT()-funktionen:
SELECT CONCAT(first_name, ' ', last_name) AS "Full_name" FROM customers;
Detta skapar en ny kolumn med etiketten "Full_name" där förnamn och efternamn kombineras.
För att filtrera den data som hämtas, används WHERE-satsen. WHERE-satsen används för att specificera ett villkor som måste vara sant för att en rad ska inkluderas i resultatet. Till exempel kan man använda följande fråga för att hämta alla kunder med ett specifikt kund-ID:
SELECT * FROM customers WHERE customer_id > 80;
I detta exempel extraheras alla rader där kundens ID är större än 80. Man kan också kombinera flera villkor med hjälp av operatorer som AND, OR, och NOT. Om vi vill hämta kunder med ett specifikt kund-ID och en viss butik-ID kan frågan se ut så här:
SELECT * FROM customers WHERE customer_id > 80 AND store_id = 'B14';
För att sortera data som hämtas kan ORDER BY-satsen användas. Den gör det möjligt att ange i vilken ordning resultaten ska returneras, antingen stigande (ASC) eller fallande (DESC). Om vi vill sortera resultaten efter kund-ID i fallande ordning kan frågan se ut så här:
SELECT * FROM customers WHERE customer_id > 80 ORDER BY customer_id DESC;
Om vi istället vill ta bort dubbletter av rader som hämtas kan vi använda DISTINCT-satsen. Denna funktion är användbar om vi vill få unika värden från en kolumn eller kombination av kolumner. Exempelvis:
SELECT DISTINCT first_name, last_name FROM customers;
Här kommer endast unika förnamn och efternamn att returneras.
För att hämta data från flera tabeller använder man JOIN-satser, där INNER JOIN, LEFT JOIN, RIGHT JOIN och FULL JOIN är de mest använda. Genom att använda JOIN kan vi kombinera information från olika tabeller baserat på gemensamma kolumner, vilket gör att vi kan skapa mer komplexa och detaljerade frågeställningar.
SQL-syntaxen tillåter även att vi grupperar data med hjälp av GROUP BY-satsen, som används för att dela upp data i grupper baserat på specifika kolumner. Om vi till exempel vill få ett sammanfattat resultat av antalet kunder per butik kan frågan se ut så här:
SELECT store_id, COUNT(*) FROM customers GROUP BY store_id;
I denna fråga grupperar vi kunderna efter butik-ID och räknar antalet kunder per butik.
I vissa fall kan det vara användbart att filtrera grupperad data ytterligare. Det görs genom HAVING-satsen, som används för att filtrera resultatet efter att data har grupperats. Exempelvis, för att endast visa de butiker som har mer än 2 kunder kan frågan se ut så här:
SELECT store_id, COUNT(*) FROM customers GROUP BY store_id HAVING COUNT(*) > 2;
En annan viktig aspekt av att använda SQL är hantering av relationsdatabaser. I en relationsdatabas beskriver relationerna hur data är relaterade mellan olika tabeller. Det finns flera typer av relationer, och varje typ används beroende på strukturen och behovet i databasen. De vanligaste relationstyperna är en-till-en (1:1), en-till-många (1:M), och många-till-en (M:1).
En en-till-en-relation förekommer när en post i en tabell är relaterad till exakt en post i en annan tabell. Ett exempel på en sådan relation kan vara en tabell för personer och en tabell för pass, där varje person har ett unikt pass.
I en en-till-många-relation är en post i en tabell relaterad till flera poster i en annan tabell. Ett exempel på detta kan vara en tabell för författare och en tabell för böcker, där en författare kan skriva flera böcker, men varje bok endast är skriven av en författare.
En många-till-en-relation är motsatsen till en en-till-många-relation, där flera poster i en tabell är relaterade till en post i en annan tabell, som i fallet med anställda och avdelningar, där flera anställda arbetar inom en och samma avdelning.
Att förstå och korrekt använda SQL-satser och relationer mellan tabeller är grundläggande för att effektivt kunna hantera data i en relationsdatabas. Genom att använda rätt tekniker och syntax kan man optimera sina databasfrågor och säkerställa att man får ut det mest relevanta och precisa resultatet från sin databas.
Hur man skapar en migrationsuppgift i AWS Database Migration Service
I nästa skärm ska vi skapa källändpunkten. Notera att databasen vi använder är den som vi skapade inom EC2-instansen enligt Figur 13.15. När du skapar en källändpunkt, bör du ange namn på databasen och skapa en endpoint enligt anvisningarna. Efter det, skapar vi en målendpunkt genom att välja måltypen "Target" och koppla den till den RDS-instans som vi tidigare skapat. Denna instans kan väljas från en dropdown-meny där vi väljer vår specifika RDS-instans.
För att konfigurera målendpunkten, tillhandahåller vi ett namn, väljer motor och servernamn. Genom att välja alternativet "Provide access information manually" kommer vissa informationer, som till exempel servernamnet, att fyllas i automatiskt. Här ska vi också ange portnummer och användaruppgifter. Viktigt att komma ihåg här är att lösenordet är det som tilldelades användaren "postgres" när vi skapade RDS-instansen. PostgreSQL använder också en standarddatabas, "postgres", som skapas automatiskt vid installationen av PostgreSQL.
Vidare ska vi ändra inställningen för säker anslutning genom att aktivera SSL-läge ("require"), vilket är en säkerhetsåtgärd för att kryptera kommunikationen mellan instanserna. Innan vi testar våra endpoints, måste vi skapa en replikationsinstans som kommer att hantera migrationsprocessen.
En replikationsinstans i AWS Database Migration Service (DMS) är avgörande för att genomföra datamigrering. Den spelar en central roll i att ansluta till källdatabasen, extrahera data, omvandla den till ett format som kan laddas upp i måldatabasen och slutligen genomföra själva uppladdningen av data. För att skapa en replikationsinstans går vi till DMS-konsolen och väljer att skapa en ny instans i sektionen "Provisioned instances". En sådan instans hanterar alla migrationsaktiviteter, inklusive kontinuerlig replikation och initial dataöverföring.
Vid konfigureringen av replikationsinstansen ska vi säkerställa att den är kopplad till både EC2-instansen och RDS-instansen, och att instansen får korrekt åtkomst via säkerhetsgrupper. För detta ändamål måste IP-adressen för DMS-replikationsinstansen tillåtas i både EC2 och RDS säkerhetsgrupper. Den privata IP-adressen för DMS-replikationsinstansen kan hittas i DMS-konsolens översiktsvy.
Efter att ha lagt till IP-adressen i säkerhetsgrupperna på både EC2 och RDS, ska vi också uppdatera pg_hba.conf-filen på EC2-instansen. Denna fil styr autentisering och åtkomst till PostgreSQL-databasen. Vi kommer att lägga till både vår egen lokala maskins IP-adress och replikationsinstansens IP-adress i denna fil, vilket möjliggör korrekt åtkomst under migrationsprocessen. För att tillämpa ändringarna behöver vi ladda om PostgreSQL-tjänsten.
Innan migrationsuppgiften kan starta måste vi testa våra skapade endpoints. Detta kan göras genom att välja varje endpoint i DMS-konsolen och genomföra en anslutningstest. Både käll- och målendpunkterna måste vara testade med ett resultat av "success" innan vi går vidare.
Slutligen ska vi skapa en migrationsuppgift. En migrationsuppgift i AWS DMS är det som ansvarar för själva dataflytten från käll- till måldatabasen. Det finns tre typer av migrationsuppgifter: Full Load (där all data flyttas), Change Data Capture (CDC) som fångar upp och applicerar förändringar kontinuerligt, och Full Load + CDC, vilket är den bästa lösningen för migrering med minimal driftstopp.
När uppgiften har startat kan vi följa dess framsteg genom AWS Management Console, CloudWatch-metrik och DMS-specifika loggar. Om det behövs, kan en för-migrering bedömning också göras för att säkerställa att inga problem finns som skulle kunna påverka processen.
För att säkerställa en framgångsrik migrering är det också viktigt att förstå hur säkerhetsaspekter som brandväggar och autentisering mellan olika instanser fungerar. En missad säkerhetskonfiguration kan leda till misslyckade anslutningar och fördröjningar i processen. Vidare måste man också vara medveten om att replikation och datamigrering inte är omedelbara processer och kan kräva noggrann övervakning och justeringar efter att uppgiften har påbörjats.

Deutsch
Francais
Nederlands
Svenska
Norsk
Dansk
Suomi
Espanol
Italiano
Portugues
Magyar
Polski
Cestina
Русский