Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir: SQL Server 2016 (13.x) ve sonraki sürümleri
Bu derste RevoScaleR paketindeki işlevler tanıtılır ve aşağıdaki görevlerde size yol gösterilir:
- SQL Server'a bağlanma
- İhtiyacınız olan verileri içeren bir sorgu tanımlayın veya bir tablo veya görünüm belirtin
- R kodu çalıştırırken kullanılacak bir veya daha fazla işlem bağlamı tanımlama
- İsteğe bağlı olarak, kaynaktan okunurken veri kaynağına uygulanan dönüştürmeleri tanımlayın
SQL Server işlem bağlamı tanımlama
aşağıdaki R deyimlerini istemci iş istasyonundaki bir R ortamında çalıştırın. Bu bölümde, tüm RevoScaleR paketlerinin yanı sıra temel, basit bir R araçları kümesi içerdiğinden Microsoft R İstemcisi ile bir veri bilimi iş istasyonu varsayılır. Örneğin, bu bölümde R betiğini çalıştırmak için Rgui.exe kullanabilirsiniz.
RevoScaleR paketi henüz yüklenmemişse şu R kodu satırını çalıştırın:
library("RevoScaleR")Bu durumda tırnak işaretleri isteğe bağlı olmasına rağmen önerilir.
Hata alırsanız R geliştirme ortamınızın RevoScaleR paketini içeren bir kitaplık kullandığından emin olun. Geçerli kitaplık yolunu görüntülemek için gibi
.libPaths()bir komut kullanın.SQL Server için bağlantı dizesini oluşturun ve bir R değişkeni olan connStr'e kaydedin.
"your_server_name" yer tutucusunun adını geçerli bir SQL Server örneği adıyla değiştirmeniz gerekir. Sunucu adı için yalnızca örnek adını kullanabilir veya ağınıza bağlı olarak adı tam olarak nitelemeniz gerekebilir.
SQL Server kimlik doğrulaması için bağlantı söz dizimi aşağıdaki gibidir:
connStr <- "Driver=SQL Server;Server=your_server_name;Database=nyctaxi_sample;Uid=your-sql-login;Pwd=your-login-password"Windows kimlik doğrulaması için söz dizimi biraz farklıdır:
connStr <- "Driver=SQL Server;Server=your_server_name;Database=nyctaxi_sample;Trusted_Connection=True"Genellikle, parolaların R kodunuzda kaydedilmesini önlemek için mümkün olduğunca Windows kimlik doğrulamasını kullanmanızı öneririz.
Yeni bir işlem bağlamı oluştururken kullanılacak değişkenleri tanımlayın. İşlem bağlamı nesnesini oluşturduktan sonra SQL Server örneğinde R kodu çalıştırmak için kullanabilirsiniz.
sqlShareDir <- paste("C:\\AllShare\\",Sys.getenv("USERNAME"),sep="") sqlWait <- TRUE sqlConsoleOutput <- FALSER, R nesnelerini iş istasyonunuzla SQL Server bilgisayarı arasında ileri geri seri hale getirirken geçici bir dizin kullanır. sqlShareDir olarak kullanılan yerel dizini belirtebilir veya varsayılanı kabul edebilirsiniz.
R'nin sunucudan sonuçları beklemesini isteyip istemediğinizi belirtmek için sqlWait kullanın. Bekleme ve beklemeyen işlerle ilgili bir tartışma için bkz. Microsoft R'de RevoScaleR ile dağıtılmış ve paralel bilgi işlem.
R konsolundan çıktı görmek istemediğinizi belirtmek için sqlConsoleOutput bağımsız değişkenini kullanın.
RxInSqlServer oluşturucusunu çağırarak değişkenleri ve bağlantı dizelerini önceden tanımlanmış olan işlem bağlamı nesnesini oluşturur ve yeni nesneyi R değişkeni sqlcc'ye kaydedersiniz.
sqlcc <- RxInSqlServer(connectionString = connStr, shareDir = sqlShareDir, wait = sqlWait, consoleOutput = sqlConsoleOutput)Varsayılan olarak, işlem bağlamı yereldir, bu nedenle etkin işlem bağlamını açıkça ayarlamanız gerekir.
rxSetComputeContext(sqlcc)- rxSetComputeContext , daha önce etkin olan işlem bağlamını görünmez bir şekilde döndürerek kullanabilmenizi sağlar
- rxGetComputeContext etkin işlem bağlamını döndürür
İşlem bağlamı ayarlamanın yalnızca RevoScaleR paketindeki işlevleri kullanan işlemleri etkileyeceğini unutmayın; işlem bağlamı, açık kaynak R işlemlerinin gerçekleştirilme şeklini etkilemez.
RxSqlServer kullanarak veri kaynağı oluşturma
RevoScaleR ve MicrosoftML gibi Microsoft R kitaplıklarını kullanırken , veri kaynağı RevoScaleR işlevlerini kullanarak oluşturduğunuz bir nesnedir. Veri kaynağı nesnesi, model eğitimi veya özellik ayıklama gibi bir görev için kullanmak istediğiniz bazı veri kümesini belirtir. SQL Server dahil olmak üzere çeşitli kaynaklardan veri alabilirsiniz. Şu anda desteklenen kaynakların listesi için bkz. RxDataSource.
Daha önce bir bağlantı dizesi tanımlamış ve bu bilgileri bir R değişkenine kaydetmişsinizdir. Almak istediğiniz verileri belirtmek için bu bağlantı bilgilerini yeniden kullanabilirsiniz.
SQL sorgusunu dize değişkeni olarak kaydedin. Sorgu, modeli eğiten verileri tanımlar.
sampleDataQuery <- "SELECT TOP 1000 tipped, fare_amount, passenger_count,trip_time_in_secs,trip_distance, pickup_datetime, dropoff_datetime, pickup_longitude, pickup_latitude, dropoff_longitude, dropoff_latitude FROM nyctaxi_sample"İşlerin daha hızlı çalışmasını sağlamak için burada TOP ifadesi kullandık, ancak sorgu tarafından döndürülen gerçek satırlar, sıralamaya bağlı olarak değişebilir. Bu nedenle, özet sonuçlarınız aşağıda listelenenlerden de farklı olabilir. TOP yan tümcesini kaldırmaktan çekinmeyin.
Sorgu tanımını RxSqlServerData işlevine bağımsız değişken olarak geçirin.
inDataSource <- RxSqlServerData( sqlQuery = sampleDataQuery, connectionString = connStr, colClasses = c(pickup_longitude = "numeric", pickup_latitude = "numeric", dropoff_longitude = "numeric", dropoff_latitude = "numeric"), rowsPerRead=500 )colClasses bağımsız değişkeni, verileri SQL Server ile R arasında taşırken kullanılacak sütun türlerini belirtir. SQL Server R'den farklı veri türleri ve daha fazla veri türü kullandığından bu önemlidir. Daha fazla bilgi için bkz. R Kitaplıkları ve Veri Türleri.
rowsPerRead bellek kullanımını yönetmek ve hesaplamaları verimli bir şekilde gerçekleştirmek için önemlidir. R Services'daki (In-Database) gelişmiş analitik işlevlerin çoğu verileri öbekler halinde işler ve ara sonuçları biriktirerek tüm veriler okunduktan sonra son hesaplamaları döndürür. rowsPerRead parametresini ekleyerek, işlenmek üzere her öbekte kaç veri satırının okunabileceğini denetleyebilirsiniz. Bu parametrenin değeri çok büyükse, bu kadar büyük bir veri öbeklerini verimli bir şekilde işlemek için yeterli belleğiniz olmadığından veri erişimi yavaş olabilir. Bazı sistemlerde , RowsPerRead değerini aşırı küçük bir değere ayarlamak da daha yavaş performans sağlayabilir.
Bu noktada inDataSource nesnesini oluşturdunuz, ancak herhangi bir veri içermiyor. Veriler, rxImport veya rxSummary gibi bir işlev çalıştırana kadar SQL sorgusundan yerel ortama çekilmez.
Ancak, artık veri nesnelerini tanımladığınıza göre, bunu diğer işlevler için bağımsız değişken olarak kullanabilirsiniz.
R özetlerinde SQL Server verilerini kullanma
Bu bölümde, uzak işlem bağlamlarını destekleyen R Services (In-Database) içinde sağlanan işlevlerin birkaçını deneyeceksiniz. Veri kaynağına R işlevleri uygulayarak SQL Server verilerini keşfedebilir, özetleyebilir ve grafikleyebilirsiniz.
Veri kaynağındaki değişkenlerin ve veri türlerinin listesini almak için rxGetVarInfo işlevini çağırın.
rxGetVarInfo kullanışlı bir işlevdir; en yüksek ve en düşük değerler, veri türü ve faktör sütunlarındaki düzeylerin sayısı gibi bilgileri almak için bunu herhangi bir veri çerçevesinde veya uzak veri nesnesindeki bir veri kümesinde çağırabilirsiniz.
Bu işlevi her tür veri girişi, özellik dönüşümü veya özellik mühendisliğinden sonra çalıştırmayı göz önünde bulundurun. Bunu yaparak, modelinizde kullanmak istediğiniz tüm özelliklerin beklenen veri türünde olduğundan emin olabilir ve hatalardan kaçınabilirsiniz.
rxGetVarInfo(data = inDataSource)Sonuçlar
Var 1: tipped, Type: integer Var 2: fare_amount, Type: numeric Var 3: passenger_count, Type: integer Var 4: trip_time_in_secs, Type: numeric, Storage: int64 Var 5: trip_distance, Type: numeric Var 6: pickup_datetime, Type: character Var 7: dropoff_datetime, Type: character Var 8: pickup_longitude, Type: numeric Var 9: pickup_latitude, Type: numeric Var 10: dropoff_longitude, Type: numericŞimdi tek tek değişkenler hakkında daha ayrıntılı istatistikler almak için RevoScaleR işlevini rxSummary olarak çağırın.
rxSummary, R
summaryişlevini temel alır, ancak bazı ek özelliklere ve avantajlara sahiptir. rxSummary birden çok işlem bağlamında çalışır ve öbekleme desteği sağlar. Ayrıca rxSummary kullanarak değerleri dönüştürebilir veya faktör düzeylerini temel alarak özetleyebilirsiniz.Bu örnekte, yolcu sayısına göre ücret tutarını özetlersiniz.
start.time <- proc.time() rxSummary(~fare_amount:F(passenger_count,1,6), data = inDataSource) used.time <- proc.time() - start.time print(paste("It takes CPU Time=", round(used.time[1]+used.time[2],2)," seconds, Elapsed Time=", round(used.time[3],2), " seconds to summarize the inDataSource.", sep=""))- rxSummary'nin ilk bağımsız değişkeni, özetleme işlemi için kullanacağınız formülü veya terimi belirler. Burada,
F()işlevi, passenger_count içindeki değerleri özetlemeden önce faktörlere dönüştürmek için kullanılır. Ayrıca, passenger_count faktörü değişkeni için en düşük değeri (1) ve en yüksek değeri (6) belirtmeniz gerekir. - Çıkış istatistiklerini belirtmezseniz, varsayılan olarak rxSummary çıkışları Mean, StDev, Min, Max ve geçerli ve eksik gözlemlerin sayısıdır.
- Bu örnek, performansı karşılaştırabilmeniz için işlevin başlangıç ve tamamlanma zamanını izlemeye yönelik bazı kodlar da içerir.
Sonuçlar
rxSummary işlevi başarıyla çalıştırılırsa, bunun gibi sonuçları ve ardından kategoriye göre istatistiklerin listesini görmeniz gerekir.
rxSummary(formula = ~fare_amount:F(passenger_count, 1,6), data = inDataSource) Data: inDataSource (RxSqlServerData Data Source) Number of valid observations: 1000- rxSummary'nin ilk bağımsız değişkeni, özetleme işlemi için kullanacağınız formülü veya terimi belirler. Burada,
Büyük veri üzerinde bonus alıştırma
Tüm satırlarla yeni bir sorgu dizesi tanımlamayı deneyin. Bu deneme için yeni bir veri kaynağı nesnesi ayarlamanızı öneririz. Aktarım hızını nasıl etkilediğini görmek için rowsToRead parametresini değiştirmeyi de deneyebilirsiniz.
bigDataQuery <- "SELECT tipped, fare_amount, passenger_count,trip_time_in_secs,trip_distance, pickup_datetime, dropoff_datetime, pickup_longitude, pickup_latitude, dropoff_longitude, dropoff_latitude FROM nyctaxi_sample"
bigDataSource <- RxSqlServerData(
sqlQuery = bigDataQuery,
connectionString = connStr,
colClasses = c(pickup_longitude = "numeric", pickup_latitude = "numeric",
dropoff_longitude = "numeric", dropoff_latitude = "numeric"),
rowsPerRead=500
)
start.time <- proc.time()
rxSummary(~fare_amount:F(passenger_count,1,6), data = bigDataSource)
used.time <- proc.time() - start.time
print(paste("It takes CPU Time=", round(used.time[1]+used.time[2],2)," seconds,
Elapsed Time=", round(used.time[3],2),
" seconds to summarize the inDataSource.", sep=""))
Tavsiye
Bu çalışırken, bağlantının nasıl yapıldığını ve R kodunun SQL Server hizmetleri kullanılarak nasıl çalıştırıldığından emin olmak için İşlem Gezgini veya SQL Profiler gibi bir araç kullanabilirsiniz.