2018-02-25
Zdarza się i to szczególnie wtedy, kiedy baza danych ma inne collation niż serwer/instancja SQL, że wykonywanie zapytania pobierającego dane z jednej bazy i porównującego te dane z danymi z innej bazy, że zapytanie kończy się błędem:
Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "Polish_CI_AS" in the equal to operation.
Collation to parametr zarówno instancji, jak i bazy, jak i każdej kolumny tekstowej jak i nawet poszczególnych zapytań, który określa jak dane są sortowane. Np. można rozróżniać duże i małe litery lub nie. Collation, które rozróżnia wielkość liter ma w nazwie CS (Case Sensitive), a to collation, które nie rozróżnia ma w nazwie CI (Case Insensitive). Collation odpowiada też regułom sortowania zdefiniowanym dla poszczególnych języków, stąd mamy collation angielskie, polskie, chińskie itd. Czytaj dalej »
2018-02-14
O wyrażeniach regularnych pisałem już tutaj: https://www.mobilo24.eu/wyrazenia-regularne-bardzo-krotki-przewodnik/
Teraz parę słów o wyszukiwaniu w napisie liczb z wykorzystaniem regular expressions (regex) w Pythonie:
Ilekroć chcesz pracować z wyrażeniami regularnymi zacznij od zaimportowania modułu re
import re
Załóżmy, że mamy do czynienia z napisem „OSTP 288” i chcemy wyciągnąć z niego 288. Po kolei należy:
- korzystając z funkcji re.compile utworzyć prekompilowane wyrażenie regularne
- korzystając z funkcji re.match przeprowadzić wyszukiwanie wyrażeń pasujących do maski
- wynik(i) są dostępne za pomocą metody groups(). Jeśli coś zostało znalezione, to wszystkie pasujące dopasowania znajdą się właśnie tutaj
- a wyrażenie regularne? Tutaj mówi tak
- .* – ma być dowolny ciąg dowolnych znaków
- (\d+) – tutaj jest zdefiniowana grupa dopasowania – o tym świadczą () – i tu zostanie zakwalifikowana jedna lub więcej + cyfra \d
- .* – a potem ma być znowu dowolna ilość dowolnych znaków:
a_text="OSTP 288"
re_expression = re.compile('.*(\d+).*')
re_result = re.match(re_expression,a_text)
re_result.groups()
To teraz przyjmijmy że mamy do czynienia z napisem '1234/5678′. Chcemy wydobyć liczby przed i po /. Właściwie czynności do wykonania są takie same, może tylko wyrażenie regularne wymaga małego wyjaśnienia:
- (\d+) – pierwsza grupa dopasowania zbudowana tak samo jak poprzednio
- / – czyli jawnie podany znak jaki musi występować po pierwszej odkrytej liczbie
- (\d+) – druga grupa dopasowania
- Zauważ, że nie dopuszczamy występowania w napisie jakichkolwiek innych znaków poza liczbą, ukośnikiem i liczbą
a_text = '1234/5678'
re_expression = re.compile('(\d+)/(\d+)')
re_result = re.match(re_expression,a_text)
re_result.groups()
I ostatni przykład. Tu mamy tekst 'The price for 10 pieces is 330 USD’ i chcemy z niego wydobyć cenę 330. Logika postępowania taka sama jak poprzednio, a wyrażenie regularne:
- .* – dowolna ilość dowolnych znaków
- – spacja
- (\d+) – grupa dopasowania
- USD$ – spacja, napis USD i na tym koniec tekstu. Nic więcej tam nie może występować – to właśnie znaczenie znaku $
a_text = 'The price for 10 pieces is 330 USD'
re_expression = re.compile('.* (\d+) USD$')
re_result = re.match(re_expression,a_text)
re_result.groups()
2018-02-03
Załóżmy, że w pliku cities.csv znajduje sie następujący tekst
CityName,Number,YesNo
New York,80,0
San Francisco,95,1
Paris,95,0
Rome,100,1
czyli mamy do czynienia ze standardowym plikiem Comma Separated Values (CSV)
Żeby rozpocząć pracę z plikiem CSV zaimportuj najpierw moduł csv. Funkcja, która rzeczywiście wczyta i zinterpretuje plik CSV to csv.reader. Generalnie posiadając przetworzony przez reader plik w zmiennej, właściwie nic więcej nie trzeba. Problemem może być tylko to, że obiekt zwracany przez reader jest iteratorem, czyli można po nim „przejść” tylko jeden raz. Jeśli Twój plan to przetworzenie danych wiele razy i na różne sposoby, to można skonwertować do listy. Dlatego początek programu mógłby wyglądać tak:
import csv
with open('C:\\temp\\cities.csv', newline='') as csvfile:
content = csv.reader(csvfile, delimiter=',', quotechar='|')
contentList = list(content)
Jeśli chcesz „przejść” przez ten plik i wyświetlać tylko zerową kolumnę to można to zrobić tak:
print("Just column 0-----------------------")
for row in contentList:
print(row[0])
a ponieważ dane są zapisane w liście, to iteracja jest możliwa po raz drugi: Czytaj dalej »
2018-01-13
Jaki mam zdać egzamin, żeby zdobyć sensowny certyfikat z zakresu SQL? – To częste pytanie, jakie otrzymuję.
Zacznijmy od certyfikatu, którego już nie ma, ale jednak jest znany i rozpoznawalny. MCDBA jest certyfikatem specyficznym dla SQL 2000 i już nie można go uzyskać. Zamiast niego mamy cały szerego innych certyfikatów, które na dodatek od czasu do czasu się zmieniają, więc niestety to co dzisiaj tutaj pieszę za jakiś rok lub dwa może być nieaktualne. Zasada wyszukania aktualnych informacji będzie taka sama: Google i „Certification SQL Server”:
https://www.microsoft.com/en-us/learning/sql-certification.aspx
Najniższy level to Microsoft Technology Associate (MTA). Nazwijmy go „półprofesjonalnym”. Na egzaminie jest sprawdzana podstawowa wiedza na temat baz danych. Co to rekord, co to tabela, co to transakcja, jak działają podstawowe komendy itp.
Kolejny poziom to Microsoft Certified Solutions Associate (MCSA). To już jest certyfikat profesjonalny. Można go zdawać na różne wersje SQL (obecnie 2012/2014 lub 2016). Ponieważ zdobywanie certyfikatu trochę trwa, zazwyczaj polecam zdawanie do najnowszej wersji. MCSA można zdawać w kilku specjalizacjach:
-MCSA: SQL 2016 Database Development
-MCSA: SQL 2016 Database Administration
-MCSA: SQL 2016 Business Intelligence Development
Każdy z tych certyfikatów zdobywasz po dwóch egzaminach. I tu można łatwo wpaść w pułapkę, bo na pierwszy rzut oka jeśli np chcesz być administratorem to możesz celować w „MCSA: SQL 2016 Database Administration”. Do egzaminów są dedykowane specjalne kursy. Niestety – z mojego doświadczenia do pomyślnego zdawania egzaminu nie wystarczy przerobienie jednego tylko kursu. Czy można sobie wyobrazić administratora, który nie zna zasad pisania zapytań? Raczej nie. A kursu z pisania zapytań w tej ścieżce nie ma!
Dlatego jeśli dopiero zaczynasz zabawę z SQL gorąco polecam „MCSA: SQL 2016 Database Development”. To dlatego materiały które obecnie publikuję na Udemy najbardziej dotyczą tej ścieżki. Na dodatek staram się, żeby kursy były konkretne i głęboko i dokładnie omawiały temat, więc poniekąd dobrze przygotowując się do jednego egzaminu już zdobywasz wiedzę potrzebną na inny. Tak jest np z modułem poświęconym XML, z którego pytają chyba na wszystkich egzaminach!
Więcej informacji: https://www.microsoft.com/en-us/learning/mcsa-sql-2016-certification.aspx
Kolejny poziom jest już ekspercki: Microsoft Certified Solutions Expert (MCSE). Ale spokojnie – wszystko dla ludzi. Osobiście te egzaminy zdawało mi się zawsze łatwiej niż na level MCSA, bo wymagają bardziej rozumienia o co chodzi w bazach danych a nie szczegółów składni. Żeby zdobyć MCSE trzeba mieć MCSA i zdać jeden z egzaminów z listy: https://www.microsoft.com/en-us/learning/mcse-data-management-analytics.aspx
W zależności od wybranego egzaminu – uzyskujesz inny tytuł MCSE
Uwaga: skróty MCSA i MCSE miały kiedyś inne znaczenie: –
-MCSA Microsoft Certified System Administrator
-MCSE Microsoft Certified System Engineer (albo Expert)
Najnowsze certyfikaty wymagają odświeżania co 3 lata (żeby nie tracić kontaktu z technologią….)
Microsoft wydaje też ładny schemat certyfikacji – nasza ścieżka jest fioletowa – w każdym razie przedostatnia). Białe kropki to egzaminy:
2018-01-13
Tak sobie skojarzyłem z kilkoma ostatnimi wdrożeniami….
Obrazek pochodzi z
http://the9gag.com/Funny-Technology/typical-apple-product-4468
2018-01-13
powershell.exe ma przełącznik pozwalający go uruchomić w trybie zgodności z niższą wersją.
pozwala to na przykład, tak jak na obrazku powyżej, przetestować, czy jakieś polecenie, którego z powodzeniem używamy w wyższej wersji powershella zadziała również na niższej. W tym przykładzie okazało się, że show-command nie jest rozpoznawane w powershell 2.0.
Ale czy aby na pewno zawsze to działa? Czytaj dalej »
2018-01-13
Zacznij od najprostszej rzeczy, tzn wywołaj
New-CimSession
bez parametrów. Powinieneś dostać sesję do swojego lokalnego komputera
Możesz też próbować łączyć się do lokalnego komputera podając jego nazwę lub „localhost”
Potem
- upewnij się że w nazwie komputera nie ma literówki
- upewnij się że komputer do którego się łaczysz jest dostępny w sieci
- upewnij się, że na komputerze do którego chcesz się połączyć ma skonfigurowany remoting (ew. lokalnie na zdalnym komputerze uruchom Enable-PSRemoting)
- sprawdź czy się do tego zdalnego komputera dostaniesz przez remoting:
Enter-PSSession <nazwa komputera> -Credential (Get-Credential)