Bagikan melalui


Tutorial: Memuat himpunan data New York Taxicab

Tutorial ini menggunakan Pernyataan COPY untuk memuat set data New York Taxicab dari akun Azure Blob Storage. Tutorial menggunakan portal Microsoft Azure dan SQL Server Management Studio (SSMS) untuk:

  • Buat pengguna yang ditunjuk untuk memuat data
  • Buat tabel untuk himpunan data sampel
  • Gunakan pernyataan COPY T-SQL untuk memuat data ke gudang data Anda
  • Menampilkan kemajuan data saat sedang dimuat

Jika tidak memiliki langganan Azure, buat akun Azure gratis sebelum Anda memulai.

Sebelum Anda mulai

Sebelum Anda memulai tutorial ini, unduh dan instal versi terbaru dari SQL Server Management Studio (SSMS).

Tutorial ini mengasumsikan Anda telah membuat kumpulan khusus SQL.

Buat pengguna untuk memuat data

Akun administrator server digunakan untuk melakukan operasi manajemen, dan tidak cocok untuk menjalankan kueri pada data pengguna. Memuat data adalah operasi intensif memori. Maksimum memori didefinisikan sesuai dengan unit gudang data dan kelas sumber daya yang telah dikonfigurasi.

Yang terbaik adalah dengan membuat info masuk dan pengguna yang didedikasikan untuk memuat data. Kemudian tambahkan pengguna pemuatan ke kelas sumber daya yang memungkinkan alokasi memori maksimum yang sesuai.

Sambungkan sebagai admin server sehingga Anda dapat membuat data masuk dan pengguna. Gunakan langkah-langkah ini untuk membuat login dan pengguna bernama LoaderRC20. Kemudian tetapkan pengguna ke staticrc20 kelas sumber daya.

  1. Di SSMS, pilih master kanan untuk memperlihatkan menu dropdown, dan pilih Kueri Baru. Jendela kueri baru terbuka.

  2. Di jendela kueri, masukkan perintah T-SQL ini untuk membuat login dan pengguna bernama LoaderRC20, menggantikan kata sandi kuat Anda sendiri.

    CREATE LOGIN LoaderRC20 WITH PASSWORD = '<strong password here>';
    CREATE USER LoaderRC20 FOR LOGIN LoaderRC20;
    
  3. Pilih Jalankan.

  4. Klik kanan mySampleDataWarehouse, dan pilih Kueri Baru. Jendela kueri baru terbuka.

  5. Masukkan perintah T-SQL berikut untuk membuat pengguna database bernama LoaderRC20 untuk LoaderRC20 login. Baris kedua memberi pengguna baru izin CONTROL pada gudang data baru. Izin ini mirip dengan menjadikan pengguna sebagai pemilik database. Baris ketiga menambahkan pengguna baru sebagai anggota staticrc20 kelas sumber daya.

    CREATE USER LoaderRC20 FOR LOGIN LoaderRC20;
    GRANT CONTROL ON DATABASE::[mySampleDataWarehouse] to LoaderRC20;
    EXEC sp_addrolemember 'staticrc20', 'LoaderRC20';
    
  6. Pilih Jalankan.

Sambungkan ke server sebagai pengguna pemuatan

Langkah pertama menuju pemuatan data adalah masuk sebagai LoaderRC20.

  1. Di Object Explorer, pilih menu dropdown Sambungkan dan pilih Mesin Database. Kotak dialog Sambungkan ke Server akan muncul.

  2. Masukkan nama server yang sepenuhnya memenuhi syarat, dan masukkan LoaderRC20 sebagai Login. Masukkan kata sandi Anda untuk LoaderRC20.

  3. Pilih Sambungkan.

  4. Saat koneksi Anda siap, Anda akan melihat dua koneksi server di Object Explorer. Satu koneksi sebagai ServerAdmin dan satu koneksi sebagai LoaderRC20.

Buat tabel untuk data sampel

Anda siap untuk memulai proses pemuatan data ke gudang data baru Anda. Bagian tutorial ini menunjukkan kepada Anda cara menggunakan pernyataan COPY untuk memuat himpunan data taksi Kota New York dari Azure Storage blob. Untuk referensi di masa mendatang, untuk mempelajari cara memasukkan data Anda ke Azure Blob Storage atau cara untuk memuatnya secara langsung dari sumber, lihat gambaran umum pemuatan.

Jalankan skrip SQL berikut dan tentukan informasi tentang data yang ingin Anda muat. Informasi ini mencakup tempat data berada, format konten data, dan definisi tabel untuk data.

  1. Di bagian sebelumnya, Anda masuk ke gudang data Anda sebagai LoaderRC20. Di SSMS, klik kanan koneksi LoaderRC20 Anda dan pilih Kueri Baru. Jendela kueri baru muncul.

  2. Bandingkan jendela kueri Anda dengan gambar sebelumnya. Verifikasi bahwa jendela kueri baru Anda berjalan sebagai LoaderRC20 dan melakukan kueri pada database Anda MySampleDataWarehouse . Gunakan jendela kueri ini untuk melakukan semua langkah pemuatan.

  3. Jalankan pernyataan T-SQL berikut untuk membuat tabel:

    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
    );
    

Muat data ke gudang data Anda

Bagian ini menggunakan Pernyataan COPY untuk memuat data sampel dari Azure Storage Blob.

Catatan

Tutorial ini memuat data langsung ke tabel akhir. Anda biasanya akan memuat ke dalam meja penahapan untuk beban kerja produksi Anda. Saat data berada dalam tabel pentahapan, Anda dapat melakukan transformasi yang diperlukan.

  1. Jalankan pernyataan berikut untuk memuat data:

    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. Lihat data Anda saat dimuat. Anda memuat beberapa GB data dan memadatkannya ke dalam indeks penyimpan kolom berkluster dengan performa tinggi. Jalankan kueri berikut yang menggunakan tampilan manajemen dinamis (DMV) untuk memperlihatkan status beban.

    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. Lihat semua kueri sistem.

    SELECT * FROM sys.dm_pdw_exec_requests;
    
  4. Nikmati data Anda yang dimuat dengan baik ke dalam gudang data Anda.

Membersihkan sumber daya

Anda ditagih untuk sumber daya komputasi dan data yang dimuat ke dalam gudang data. Tagihan ditagihkan secara terpisah.

  • Jika Anda ingin menyimpan data di penyimpanan, Anda dapat menjeda komputasi saat Anda tidak menggunakan gudang data. Dengan menjeda komputasi, Anda hanya akan dikenakan biaya untuk penyimpanan data dan Anda dapat melanjutkan komputasi setiap kali Anda siap untuk bekerja dengan data.
  • Jika Anda ingin menghapus biaya di masa mendatang, Anda dapat menghapus gudang data.

Ikuti langkah-langkah berikut untuk membersihkan sumber daya.

  1. Masuk ke portal Azure, dan pilih gudang data Anda.

  2. Untuk menjeda komputasi, pilih tombol Jeda. Saat gudang data dijeda, Anda melihat tombol Mulai. Untuk melanjutkan komputasi, pilih Mulai.

  3. Untuk menghapus gudang data sehingga Anda tidak dikenakan biaya untuk komputasi atau penyimpanan, pilih Hapus.

  4. Untuk menghapus server yang Anda buat, mynewserver-20180430.database.windows.net di gambar sebelumnya, lalu pilih Hapus. Berhati-hatilah dengan ini karena menghapus server menghapus semua database yang ditetapkan ke server.

  5. Untuk menghapus grup sumber daya, pilih myResourceGroup, lalu pilih Hapus grup sumber daya.