Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом руководстве используется инструкция COPY для загрузки набора данных New York Taxicab из учетной записи хранения объектов BLOB Azure. В этом руководстве используется портал Azure и среда SQL Server Management Studio (SSMS) для:
- Создание пользователя, назначенного для загрузки данных
- Создание таблиц для примера набора данных
- Использование инструкции COPY T-SQL для загрузки данных в хранилище данных
- Просмотр прогресса загрузки данных
Если у вас нет подписки Azure, создайте бесплатную учетную запись Azure перед началом работы.
Перед тем как начать
Перед началом работы с этим руководством скачайте и установите последнюю версию SQL Server Management Studio (SSMS).
В этом руководстве предполагается, что вы уже создали выделенный пул SQL.
Создание пользователя для загрузки данных
Учетная запись администратора сервера предназначена для выполнения операций управления и не подходит для выполнения запросов к данным пользователя. Загрузка данных — это операция с интенсивным объемом памяти. Максимальное количество памяти определяется в соответствии с единицами хранилища данных и классом ресурсов .
Рекомендуется создать имя входа и пользователя, предназначенные для загрузки данных. Затем добавьте пользователя загрузки в класс ресурсов , который обеспечивает соответствующее максимальное выделение памяти.
Подключитесь от имени администратора сервера, чтобы создать имена входа и пользователей. Используйте эти шаги, чтобы создать имя для входа и пользователя под названием LoaderRC20. Затем назначьте пользователя классу staticrc20 ресурсов.
В SSMS щелкните правой кнопкой мыши на
master, чтобы открыть контекстное меню, и выберите пункт "Создать запрос". Откроется новое окно запроса.В окне запроса введите эти команды T-SQL для создания имени входа и пользователя
LoaderRC20, заменив собственный надежный пароль.CREATE LOGIN LoaderRC20 WITH PASSWORD = '<strong password here>'; CREATE USER LoaderRC20 FOR LOGIN LoaderRC20;Выберите Выполнить.
Щелкните правой кнопкой мыши mySampleDataWarehouse и выберите команду "Создать запрос". Откроется новое окно запроса.
Введите следующие команды T-SQL, чтобы создать пользователя базы данных с именем
LoaderRC20LoaderRC20для входа. Вторая строка предоставляет новые разрешения user CONTROL в новом хранилище данных. Эти разрешения похожи на то, что пользователь является владельцем базы данных. Третья строка добавляет нового пользователя в качестве членаstaticrc20класса ресурсов.CREATE USER LoaderRC20 FOR LOGIN LoaderRC20; GRANT CONTROL ON DATABASE::[mySampleDataWarehouse] to LoaderRC20; EXEC sp_addrolemember 'staticrc20', 'LoaderRC20';Выберите Выполнить.
Подключитесь к серверу как загрузочный пользователь
Первым шагом к загрузке данных является авторизация как LoaderRC20.
В обозревателе объектов выберите раскрывающееся меню Connect и выберите ядро СУБД. Откроется диалоговое окно Соединение с сервером .
Введите полное имя сервера и введите
LoaderRC20имя входа. Введите пароль для LoaderRC20.Нажмите Подключиться.
Когда подключение будет готово, вы увидите два серверных подключения в обозревателе объектов. Одно подключение как ServerAdmin и одно подключение в качестве LoaderRC20.
Создание таблиц для примеров данных
Вы готовы начать процесс загрузки данных в новое хранилище данных. В этой части руководства показано, как с помощью инструкции COPY загрузить набор данных такси Нью-Йорка из большого двоичного объекта службы хранилища Azure. Дополнительные сведения о том, как получить данные в хранилище BLOB-объектов Azure или загрузить их непосредственно из источника, см. в обзоре загрузки.
Выполните следующие скрипты SQL и укажите сведения о данных, которые вы хотите загрузить. Эти сведения включают расположение данных, формат содержимого данных и определение таблицы для данных.
В предыдущем разделе вы вошли в хранилище данных как
LoaderRC20. В SSMS нажмите правой кнопкой мыши на подключении LoaderRC20 и выберите Новый запрос. Откроется новое окно запроса.Сравните окно запроса с предыдущим изображением. Убедитесь, что новое окно запроса выполняется как
LoaderRC20и выполняет запросы в базе данныхMySampleDataWarehouse. Используйте это окно запроса для выполнения всех шагов загрузки.Чтобы создать таблицы, выполните следующие инструкции T-SQL:
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 );
Загрузка данных в хранилище данных
В этом разделе используется инструкция COPY для загрузки примеров данных из BLOB-объекта службы хранилища Azure.
Note
В этом руководстве данные загружаются непосредственно в окончательную таблицу. Обычно вы загружаете данные в промежуточную таблицу, что является частью рабочих нагрузок на производство. Пока данные находятся в промежуточной таблице, вы можете выполнять любые необходимые преобразования.
Выполните следующие инструкции, чтобы загрузить данные:
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');Просматривайте данные по мере загрузки. Вы загружаете несколько ГБ данных и сжимаете их в высокопроизводительные кластеризованные индексы columnstore. Выполните следующий запрос, который использует динамические административные представления (DMV) для отображения состояния загрузки.
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;Просмотр всех системных запросов.
SELECT * FROM sys.dm_pdw_exec_requests;Наслаждайтесь вашими данными, загруженными в хранилище данных.
Очистите ресурсы
Плата взимается за вычислительные ресурсы и данные, загруженные в хранилище данных. Они выставляются отдельно.
- Если вы хотите сохранить данные в хранилище, вы можете приостановить вычисление, если вы не используете хранилище данных. При приостановке вычислений плата будет взиматься только за хранилище данных, и вы можете возобновить вычисление всякий раз, когда вы будете готовы к работе с данными.
- Если вы хотите удалить будущие расходы, можно удалить хранилище данных.
Выполните следующие действия, чтобы очистить ресурсы по мере необходимости.
Войдите на портал Azure и выберите хранилище данных.
Чтобы приостановить вычисление, нажмите кнопку "Приостановить ". Когда хранилище данных приостановлено, появится кнопка "Пуск ". Чтобы возобновить вычисление, нажмите кнопку "Пуск".
Чтобы удалить хранилище данных, чтобы плата за вычислительные ресурсы или хранилище не взимается, нажмите кнопку "Удалить".
Чтобы удалить созданный сервер, выберите mynewserver-20180430.database.windows.net на предыдущем изображении и нажмите кнопку "Удалить". Будьте осторожны с этим, так как удаление сервера удаляет все базы данных, назначенные серверу.
Чтобы удалить группу ресурсов, выберите myResourceGroup и выберите "Удалить группу ресурсов".