مشاركة عبر


التشغيل السريع: التحميل المجمع للبيانات باستخدام عبارة COPY

في هذا التشغيل السريع، سيتم تحميل البيانات المجمعة في مجموعة SQL المخصص باستخدام عبارة COPY البسيطة والمرنة لاستيعاب معدل النقل الكبير للبيانات. عبارة COPY هي أداة التحميل الموصى بها لأنها تمكنك من تحميل البيانات بسلاسة ومرونة من خلال توفير الوظيفة لـ:

  • السماح للمستخدمين الذين لهم امتيازات أقل بالتحميل دون الحاجة إلى أذونات CONTROL الصارمة في مستودع البيانات
  • الاستفادة من عبارة T-SQL واحدة فقط دون الحاجة إلى إنشاء أي عناصر إضافية لقاعدة البيانات
  • الاستفادة من نموذج إذن أدق دون الكشف عن مفاتيح حساب التخزين باستخدام Share Access Signatures (SAS)
  • تحديد حساب تخزين مختلف لموقع ERRORFILE (REJECTED_ROW_LOCATION)
  • تخصيص القيم الافتراضية لكل عمود مستهدف وحدد حقول بيانات المصدر لتحميلها إلى أعمدة مستهدفة محددة
  • تحديد حرف نهاية صف مخصص لملفات CSV
  • سلسلة Escape، الحقل، ومحددات الصفوف لملفات CSV
  • الاستفادة من تنسيقات تاريخ SQL Server لملفات CSV
  • تحديد أحرف البدل والملفات المتعددة في مسار موقع التخزين

المتطلبات الأساسية

يفترض التشغيل السريع أنه لديك بالفعل مجموعة SQL مخصصة. إذا لم يتم إنشاء مجموعة SQL مخصصة، فاستخدم التشغيل السريع Create and Connect - المدخل.

إعداد الأذونات المطلوبة

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

إنشاء الجدول المستهدف

في هذا المثال، سيتم تحميل البيانات من مجموعة البيانات New York taxi. سيتم تحميل جدول يسمى Trip يُمثل رحلات سيارات الأجرة التي تمت في غضون سنة واحدة. قم بتشغيل التالي لإنشاء جدول:

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

تشغيل عبارة COPY التالية التي ستقوم بتحميل البيانات من حساب Azure blob storage إلى جدول Trip.

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

مراقبة التحميل

تحقق مما إذا كان التحميل الخاص بك في تقدم عن طريق تشغيل الاستعلام التالي بشكل دوري:

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;

الخطوات التالية