Megosztás a következőn keresztül:


Oktatóanyag: A New York Taxicab-adatkészlet betöltése

Ez az oktatóanyag a COPY utasítással tölti be a New York Taxicab-adathalmazt egy Azure Blob Storage-fiókból. Az oktatóanyag az Azure Portalt és az SQL Server Management Studiót (SSMS) használja a következőkhöz:

  • Adatok betöltésére kijelölt felhasználó létrehozása
  • A mintaadatkészlet tábláinak létrehozása
  • Adatok betöltése az adattárházba a COPY T-SQL utasítás használatával
  • Az adatok állapotának megtekintése betöltés közben

Ha nem rendelkezik Azure-előfizetéssel, hozzon létre egy ingyenes Azure-fiókot mielőtt elkezdené.

Mielőtt elkezdené

Az oktatóanyag megkezdése előtt töltse le és telepítse az SQL Server Management Studio (SSMS) legújabb verzióját.

Ez az oktatóanyag feltételezi, hogy már létrehozott egy dedikált SQL-készletet.

Felhasználó létrehozása az adatok betöltéséhez

A kiszolgáló rendszergazdai fiókjának célja, hogy felügyeleti műveleteket végezzenek vele, és nem alkalmas a felhasználói adatok lekérdezésére. Az adatok betöltése memóriaigényes művelet. A memória maximális száma az adattárházegységek és a konfigurált erőforrásosztály szerint van meghatározva.

Érdemes létrehozni egy adatok betöltésére kijelölt felhasználót és fiókot. Ezután adja hozzá a betöltést végző felhasználót egy olyan erőforrásosztályhoz, amely lehetővé teszi a megfelelő mértékű maximális memórialefoglalást.

Csatlakozzon kiszolgálóadminisztrátorként, hogy bejelentkezéseket és felhasználókat hozzon létre. Az alábbi lépésekkel hozzon létre egy bejelentkezést és egy felhasználót.LoaderRC20 Ezután rendelje hozzá a felhasználót az staticrc20 erőforrásosztályhoz.

  1. Az SSMS-ben válassza a master jobb gombbal a legördülő menü megjelenítéséhez, majd válassza az Új lekérdezés lehetőséget. Megnyílik egy új lekérdezési ablak.

  2. A lekérdezési ablakban adja meg ezeket a T-SQL-parancsokat, hogy létrehozhasson egy saját erős jelszót helyettesítő bejelentkezést és felhasználót LoaderRC20.

    CREATE LOGIN LoaderRC20 WITH PASSWORD = '<strong password here>';
    CREATE USER LoaderRC20 FOR LOGIN LoaderRC20;
    
  3. Válassza a Végrehajtás lehetőséget.

  4. Kattintson jobb gombbal a mySampleDataWarehouse elemre, majd válassza a New Query (Új lekérdezés) elemet. Megnyílik egy új lekérdezési ablak.

  5. Adja meg a következő T-SQL-parancsokat az LoaderRC20 bejelentkezéshez tartozó LoaderRC20 nevű adatbázis-felhasználó létrehozásához. A második sor az új adattárházra vonatkozó CONTROL (vezérlési) engedélyeket ad az új felhasználónak. Ezen engedélyek megadása ahhoz hasonló, mintha az adatbázis tulajdonosává tenné a felhasználót. A harmadik sor hozzáadja az új felhasználót az staticrc20erőforrásosztály tagjaként.

    CREATE USER LoaderRC20 FOR LOGIN LoaderRC20;
    GRANT CONTROL ON DATABASE::[mySampleDataWarehouse] to LoaderRC20;
    EXEC sp_addrolemember 'staticrc20', 'LoaderRC20';
    
  6. Válassza a Végrehajtás lehetőséget.

Csatlakozás a kiszolgálóhoz a betöltést végző felhasználóként

Az adatok betöltésének első lépése a bejelentkezés.LoaderRC20

  1. Az Object Explorerben válassza a Csatlakozás legördülő menüt, majd az Adatbázismotort. A Connect to Server (Kapcsolódás a kiszolgálóhoz) párbeszédpanel jelenik meg.

  2. Adja meg a teljes kiszolgálónevet, és LoaderRC20 adja meg bejelentkezésként. Adja meg a LoaderRC20-hoz tartozó jelszót.

  3. Válassza a Kapcsolódás lehetőséget.

  4. Ha a kapcsolat készen áll, két kiszolgálókapcsolat jelenik meg az Object Explorerben. Egy kapcsolat ServerAdminként és egy kapcsolat LoaderRC20-ként.

Táblák létrehozása a mintaadatokhoz

Készen áll arra, hogy megkezdje az adatok új adattárházba való betöltését. Az oktatóanyag ezen része bemutatja, hogyan töltheti be a New York-i taxifülke-adathalmazt egy Azure Storage-blobból a COPY utasítással. A jövőbeli információkért tekintse meg a betöltési áttekintést, ha szeretné megtudni, hogyan szerezheti be az adatokat az Azure Blob Storage-ba, vagy hogyan töltheti be közvetlenül a forrásból.

Futtassa a következő SQL-szkripteket, és adja meg a betölteni kívánt adatokkal kapcsolatos információkat. Ezen információk közé tartozik az adatok helye, az adatok tartalmának formátuma és az adatok tábladefiníciója.

  1. Az előző szakaszban bejelentkezett az adattárházba mint LoaderRC20. Az SSMS-ben kattintson jobb gombbal a LoaderRC20-kapcsolatra, és válassza a New Query (Új lekérdezés) elemet. Megnyílik egy új lekérdezési ablak.

  2. Hasonlítsa össze a lekérdezési ablakot az előző képpel. Ellenőrizze, hogy az új lekérdezési ablak az LoaderRC20 felhasználóként fut-e, és hogy az MySampleDataWarehouse adatbázison hajt-e végre lekérdezéseket. A betöltés összes lépését ebben a lekérdezési ablakban végezze el.

  3. Futtassa a következő T-SQL-utasításokat a táblák létrehozásához:

    CREATE TABLE [dbo].[Date]
    (
        [DateID] int NOT NULL,
        [Date] datetime NULL,
        [DateBKey] char(10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [DayOfMonth] varchar(2) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [DaySuffix] varchar(4) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [DayName] varchar(9) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [DayOfWeek] char(1) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [DayOfWeekInMonth] varchar(2) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [DayOfWeekInYear] varchar(2) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [DayOfQuarter] varchar(3) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [DayOfYear] varchar(3) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [WeekOfMonth] varchar(1) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [WeekOfQuarter] varchar(2) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [WeekOfYear] varchar(2) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [Month] varchar(2) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [MonthName] varchar(9) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [MonthOfQuarter] varchar(2) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [Quarter] char(1) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [QuarterName] varchar(9) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [Year] char(4) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [YearName] char(7) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [MonthYear] char(10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [MMYYYY] char(6) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [FirstDayOfMonth] date NULL,
        [LastDayOfMonth] date NULL,
        [FirstDayOfQuarter] date NULL,
        [LastDayOfQuarter] date NULL,
        [FirstDayOfYear] date NULL,
        [LastDayOfYear] date NULL,
        [IsHolidayUSA] bit NULL,
        [IsWeekday] bit NULL,
        [HolidayUSA] varchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
    )
    WITH
    (
        DISTRIBUTION = ROUND_ROBIN,
        CLUSTERED COLUMNSTORE INDEX
    );
    
    CREATE TABLE [dbo].[Geography]
    (
        [GeographyID] int NOT NULL,
        [ZipCodeBKey] varchar(10) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
        [County] varchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [City] varchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [State] varchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [Country] varchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [ZipCode] varchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
    )
    WITH
    (
        DISTRIBUTION = ROUND_ROBIN,
        CLUSTERED COLUMNSTORE INDEX
    );
    
    CREATE TABLE [dbo].[HackneyLicense]
    (
        [HackneyLicenseID] int NOT NULL,
        [HackneyLicenseBKey] varchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
        [HackneyLicenseCode] varchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
    )
    WITH
    (
        DISTRIBUTION = ROUND_ROBIN,
        CLUSTERED COLUMNSTORE INDEX
    );
    
    CREATE TABLE [dbo].[Medallion]
    (
        [MedallionID] int NOT NULL,
        [MedallionBKey] varchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
        [MedallionCode] varchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
    )
    WITH
    (
        DISTRIBUTION = ROUND_ROBIN,
        CLUSTERED COLUMNSTORE INDEX
    );
    
    CREATE TABLE [dbo].[Time]
    (
        [TimeID] int NOT NULL,
        [TimeBKey] varchar(8) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
        [HourNumber] tinyint NOT NULL,
        [MinuteNumber] tinyint NOT NULL,
        [SecondNumber] tinyint NOT NULL,
        [TimeInSecond] int NOT NULL,
        [HourlyBucket] varchar(15) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
        [DayTimeBucketGroupKey] int NOT NULL,
        [DayTimeBucket] varchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL
    )
    WITH
    (
        DISTRIBUTION = ROUND_ROBIN,
        CLUSTERED COLUMNSTORE INDEX
    );
    
    CREATE TABLE [dbo].[Trip]
    (
        [DateID] int NOT NULL,
        [MedallionID] int NOT NULL,
        [HackneyLicenseID] int NOT NULL,
        [PickupTimeID] int NOT NULL,
        [DropoffTimeID] int NOT NULL,
        [PickupGeographyID] int NULL,
        [DropoffGeographyID] int NULL,
        [PickupLatitude] float NULL,
        [PickupLongitude] float NULL,
        [PickupLatLong] varchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [DropoffLatitude] float NULL,
        [DropoffLongitude] float NULL,
        [DropoffLatLong] varchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [PassengerCount] int NULL,
        [TripDurationSeconds] int NULL,
        [TripDistanceMiles] float NULL,
        [PaymentType] varchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [FareAmount] money NULL,
        [SurchargeAmount] money NULL,
        [TaxAmount] money NULL,
        [TipAmount] money NULL,
        [TollsAmount] money NULL,
        [TotalAmount] money NULL
    )
    WITH
    (
        DISTRIBUTION = ROUND_ROBIN,
        CLUSTERED COLUMNSTORE INDEX
    );
    
    CREATE TABLE [dbo].[Weather]
    (
        [DateID] int NOT NULL,
        [GeographyID] int NOT NULL,
        [PrecipitationInches] float NOT NULL,
        [AvgTemperatureFahrenheit] float NOT NULL
    )
    WITH
    (
        DISTRIBUTION = ROUND_ROBIN,
        CLUSTERED COLUMNSTORE INDEX
    );
    

Az adatok betöltése az adattárházba

Ez a szakasz a COPY utasítással tölti be a mintaadatokat az Azure Storage Blobból.

Feljegyzés

Ez az oktatóanyag az adatokat közvetlenül a végső táblázatba tölti be. Általában egy előkészítési táblába töltené be az éles számítási feladatokat. Amíg az adatok az előkészítési táblában vannak, bármilyen szükséges átalakítás elvégezhető rajtuk.

  1. Futtassa a következő utasításokat az adatok betöltéséhez:

    COPY INTO [dbo].[Date]
    FROM 'https://nytaxiblob.blob.core.windows.net/2013/Date'
    WITH
    (
        FILE_TYPE = 'CSV',
        FIELDTERMINATOR = ',',
        FIELDQUOTE = ''
    )
    OPTION (LABEL = 'COPY : Load [dbo].[Date] - Taxi dataset');
    
    
    COPY INTO [dbo].[Geography]
    FROM 'https://nytaxiblob.blob.core.windows.net/2013/Geography'
    WITH
    (
        FILE_TYPE = 'CSV',
        FIELDTERMINATOR = ',',
        FIELDQUOTE = ''
    )
    OPTION (LABEL = 'COPY : Load [dbo].[Geography] - Taxi dataset');
    
    COPY INTO [dbo].[HackneyLicense]
    FROM 'https://nytaxiblob.blob.core.windows.net/2013/HackneyLicense'
    WITH
    (
        FILE_TYPE = 'CSV',
        FIELDTERMINATOR = ',',
        FIELDQUOTE = ''
    )
    OPTION (LABEL = 'COPY : Load [dbo].[HackneyLicense] - Taxi dataset');
    
    COPY INTO [dbo].[Medallion]
    FROM 'https://nytaxiblob.blob.core.windows.net/2013/Medallion'
    WITH
    (
        FILE_TYPE = 'CSV',
        FIELDTERMINATOR = ',',
        FIELDQUOTE = ''
    )
    OPTION (LABEL = 'COPY : Load [dbo].[Medallion] - Taxi dataset');
    
    COPY INTO [dbo].[Time]
    FROM 'https://nytaxiblob.blob.core.windows.net/2013/Time'
    WITH
    (
        FILE_TYPE = 'CSV',
        FIELDTERMINATOR = ',',
        FIELDQUOTE = ''
    )
    OPTION (LABEL = 'COPY : Load [dbo].[Time] - Taxi dataset');
    
    COPY INTO [dbo].[Weather]
    FROM 'https://nytaxiblob.blob.core.windows.net/2013/Weather'
    WITH
    (
        FILE_TYPE = 'CSV',
        FIELDTERMINATOR = ',',
        FIELDQUOTE = '',
        ROWTERMINATOR='0X0A'
    )
    OPTION (LABEL = 'COPY : Load [dbo].[Weather] - Taxi dataset');
    
    COPY INTO [dbo].[Trip]
    FROM 'https://nytaxiblob.blob.core.windows.net/2013/Trip2013'
    WITH
    (
        FILE_TYPE = 'CSV',
        FIELDTERMINATOR = '|',
        FIELDQUOTE = '',
        ROWTERMINATOR='0X0A',
        COMPRESSION = 'GZIP'
    )
    OPTION (LABEL = 'COPY : Load [dbo].[Trip] - Taxi dataset');
    
  2. A betöltés közben megtekintheti az adatokat. Több GB-t tölt be, és nagy teljesítményű fürtözött oszlopcentrikus indexekbe tömöríti őket. Futtassa az alábbi lekérdezést, amely dinamikus felügyeleti nézetekkel (DMV-k) jeleníti meg a töltés állapotát.

    SELECT  r.[request_id]
    ,       r.[status]
    ,       r.resource_class
    ,       r.command
    ,       sum(bytes_processed) AS bytes_processed
    ,       sum(rows_processed) AS rows_processed
    FROM    sys.dm_pdw_exec_requests r
                  JOIN sys.dm_pdw_dms_workers w
                         ON r.[request_id] = w.request_id
    WHERE [label] = 'COPY : Load [dbo].[Date] - Taxi dataset' OR
        [label] = 'COPY : Load [dbo].[Geography] - Taxi dataset' OR
        [label] = 'COPY : Load [dbo].[HackneyLicense] - Taxi dataset' OR
        [label] = 'COPY : Load [dbo].[Medallion] - Taxi dataset' OR
        [label] = 'COPY : Load [dbo].[Time] - Taxi dataset' OR
        [label] = 'COPY : Load [dbo].[Weather] - Taxi dataset' OR
        [label] = 'COPY : Load [dbo].[Trip] - Taxi dataset'
    and session_id <> session_id() and type = 'WRITER'
    GROUP BY r.[request_id]
    ,       r.[status]
    ,       r.resource_class
    ,       r.command;
    
  3. Tekintse meg az összes rendszerlekérdezést.

    SELECT * FROM sys.dm_pdw_exec_requests;
    
  4. Élvezze az adattárházba szépen betöltött adatokat.

Az erőforrások megtisztítása

Az adattárházába betöltött számítási erőforrások és adatok díjkötelesek. Ezeket külön-külön számlázzuk.

  • Ha szeretné az adatokat megtartani a tárolóban, a számítási erőforrásokat szüneteltetheti, amíg nem használja az adattárházat. A számítás szüneteltetésével csak az adattárolásért kell fizetnie, és bármikor folytathatja a számítást, amikor készen áll az adatokkal való munkára.
  • Ha szeretné megelőzni a jövőbeli kiadásokat, az adattárházat törölheti is.

Kövesse az alábbi lépéseket a fölöslegessé vált erőforrások eltávolítására.

  1. Jelentkezzen be az Azure Portalra, és válassza ki az adattárházat.

  2. A számítás szüneteltetéséhez válassza a Szüneteltetés gombot. Ha az adattárház szüneteltetve van, az Indítás gomb látható. A számítás folytatásához válassza a Start lehetőséget.

  3. Ha el szeretné távolítani az adattárházat, hogy ne kelljen fizetnie a számításért vagy a tárolásért, válassza a Törlés lehetőséget.

  4. A létrehozott kiszolgáló eltávolításához válassza a mynewserver-20180430.database.windows.net az előző képen, majd válassza a Törlés lehetőséget. Ügyeljen erre, mert a kiszolgáló törlése törli a kiszolgálóhoz rendelt összes adatbázist.

  5. Az erőforráscsoport eltávolításához válassza a myResourceGroup, majd az Erőforráscsoport törlése lehetőséget.