Hızlı Başlangıç: COPY deyimini kullanarak verileri toplu yükleme

Tip

Microsoft Fabric Data Warehouse geleceğe hazır mimariye, yerleşik yapay zekaya ve yeni özelliklere sahip data lake foundation üzerinde kurumsal ölçekli ilişkisel bir ambardır. Veri ambarı konusunda yeniyseniz Fabric Data Warehouse ile başlayın. Mevcut özel SQL havuzu iş yükleri, veri bilimi, gerçek zamanlı analiz ve raporlama genelinde yeni özelliklere erişmek için Fabric yükseltilebilir.

Bu hızlı başlangıçta, yüksek aktarım hızına sahip veri alımı için basit ve esnek COPY deyimini kullanarak verileri ayrılmış SQL havuzunuza toplu olarak yükleyeceksiniz. COPY deyimi, aşağıdaki işlevleri sağlayarak verileri sorunsuz ve esnek bir şekilde yüklemenize olanak sağladığından önerilen yükleme yardımcı programıdır:

  • Daha düşük ayrıcalıklı kullanıcıların veri ambarına, katı CONTROL izinlerine gerek kalmaksızın veri yüklemesine izin ver.
  • Ek veritabanı nesneleri oluşturmak zorunda kalmadan yalnızca tek bir T-SQL deyiminden yararlanın
  • Paylaşım Erişim İmzalarını (SAS) kullanarak depolama hesabı anahtarlarını göstermeden daha ince bir izin modelinden yararlanın
  • ERRORFILE konumu için farklı bir depolama hesabı belirtin (REJECTED_ROW_LOCATION)
  • Her hedef sütun için varsayılan değerleri özelleştirin ve belirli hedef sütunlara yüklenecek kaynak veri alanlarını belirtin
  • CSV dosyaları için özel satır sonlandırıcı belirtme
  • CSV dosyaları için kaçış dizesi, alan ve satır sınırlayıcıları
  • CSV dosyaları için SQL Server Tarih biçimlerini kullanma
  • Depolama konumu yolunda joker karakterleri ve birden çok dosyayı belirtin

Önkoşullar

Bu hızlı başlangıçta zaten ayrılmış bir SQL havuzunuz olduğu varsayılır. Ayrılmış bir SQL havuzu oluşturulmadıysa Oluştur ve Bağlan - portal hızlı başlangıcını kullanın.

Gerekli izinleri ayarlama

-- List the permissions for your user
select  princ.name
,       princ.type_desc
,       perm.permission_name
,       perm.state_desc
,       perm.class_desc
,       object_name(perm.major_id)
from    sys.database_principals princ
left join
        sys.database_permissions perm
on      perm.grantee_principal_id = princ.principal_id
where name = '<yourusername>';

--Make sure your user has the permissions to CREATE tables in the [dbo] schema
GRANT CREATE TABLE TO <yourusername>;
GRANT ALTER ON SCHEMA::dbo TO <yourusername>;

--Make sure your user has ADMINISTER DATABASE BULK OPERATIONS permissions
GRANT ADMINISTER DATABASE BULK OPERATIONS TO <yourusername>

--Make sure your user has INSERT permissions on the target table
GRANT INSERT ON <yourtable> TO <yourusername>

Hedef tabloyu oluşturma

Bu örnekte, New York taksi veri kümesinden veri yükleyeceğiz. Tek bir yıl içinde yapılan taksi yolculuklarını temsil eden Trip adlı bir tablo yükleyeceğiz. Tabloyu oluşturmak için aşağıdakileri çalıştırın:

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

COPY deyimini çalıştır

Azure blob depolama hesabından Trip tablosuna veri yükleyecek aşağıdaki COPY deyimini çalıştırın.

COPY INTO [dbo].[Trip] FROM 'https://nytaxiblob.blob.core.windows.net/2013/Trip2013/'
WITH (
   FIELDTERMINATOR='|',
   ROWTERMINATOR='0x0A'
) OPTION (LABEL = 'COPY: dbo.trip');

Yükü izleme

Aşağıdaki sorguyu düzenli aralıklarla çalıştırarak yükünüzün ilerleme kaydedip ilerlemediğini denetleyin:

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: dbo.trip' and session_id <> session_id() and type = 'WRITER'
GROUP BY r.[request_id]                           
,       r.[status]                               
,       r.resource_class                         
,       r.command;

Sonraki adımlar