I got my first certification. I’ve been in IT for more than a decade and have always been fearful to attempt getting certifications. I had a fear of failure. I realize now there is no shame in failing a certification test, it just means you need to keep studying. Luckily, I passed! Define your goals and do the work to achieve them.
I’ve been following Gartner’s magic quadrant and the Forrester Wave for a while now and decided to compare them for BI platforms, Integrations, and DB/DW. There are differences in what kind of platform and the attributes for scoring by each, but I wanted to try to line up the closest kinds of platform analysis that I had seen by each. I think it would be interesting to show how these have changed year-over-year to get a feel for momentum.
I didn’t pay for redistribution licensing for these, so I hope they don’t come after me.
Business Intelligence Platforms:
Database / Data Warehouse:
Waves dressed in sapphire,
green eyes aglow –
Pulsing through me,
her currents flow –
Deep breath, exhales,
protruding through Icelandic vales –
переплетаются в одно.
That is no country for old men. The young
In one another’s arms, birds in the trees
– Those dying generations – at their song,
The salmon‐falls, the mackerel‐crowded seas,
Fish, flesh, or fowl, commend all summer long
Whatever is begotten, born, and dies.
Caught in that sensual music all neglect
Monuments of unageing intellect.
An aged man is but a paltry thing,
A tattered coat upon a stick, unless
Soul clap its hands and sing, and louder sing
For every tatter in its mortal dress,
Nor is there singing school but studying
Monuments of its own magnificence;
And therefore I have sailed the seas and come
To the holy city of Byzantium.
O sages standing in God’s holy fire
As in the gold mosaic of a wall,
Come from the holy fire, perne in a gyre,
And be the singing‐masters of my soul.
Consume my heart away; sick with desire
And fastened to a dying animal
It knows not what it is; and gather me
Into the artifice of eternity.
Once out of nature I shall never take
My bodily form from any natural thing,
But such a form as Grecian goldsmiths make
Of hammered gold and gold enamelling
To keep a drowsy Emperor awake;
Or set upon a golden bough to sing
To lords and ladies of Byzantium
Of what is past, or passing, or to come.
-William Butler Yeats
I gave a short talk about PowerBI for our internal company podcast.
“Interpretation is imposed by others. Paintings are to be admired and contemplated [not named or explained]. If I had something to say I would write it down or say it; I don’t need painting for that.”
select [distributionHistory].comments [Comments]
, isnull([Last Error].error_text,'') as [Last Error]
, convert(datetimeoffset, [distributionHistory].[time]) [Last Synchronized Date]
, [distributionAgent].publication [Publication Name]
, [distributionAgent].publisher_db as [Publisher Database]
when [distributionHistory].runstatus = '1' then 'Start'
when [distributionHistory].runstatus = '2' then 'Succeed'
when [distributionHistory].runstatus = '3' then 'InProgress'
when [distributionHistory].runstatus = '4' then 'Idle'
when [distributionHistory].runstatus = '5' then 'Retry'
when [distributionHistory].runstatus = '6' then 'Fail'
else cast([distributionHistory].runstatus as varchar)
) [Run Status]
, sub.name [Subscriber]
, [distributionAgent].subscriber_db [Subscriber Database]
when [distributionAgent].subscription_type = '0' then 'Push'
when [distributionAgent].subscription_type = '1' then 'Pull'
when [distributionAgent].subscription_type = '2' then 'Anonymous'
else cast([distributionAgent].subscription_type as varchar)
) [Subscription Type]
, und.UndelivCmdsInDistDB [Undelivered Commands]
[distribution].[dbo].[MSdistribution_agents] as [distributionAgent] with (nolock)
left join [distribution].[dbo].[MSdistribution_history] as [distributionHistory] with (nolock)
on [distributionHistory].agent_id = [distributionAgent].id
, sum(case when xact_seqno > MaxAgentValue.maxseq then 1 else 0 end) as UndelivCmdsInDistDB
[distribution].[dbo].[MSrepl_commands] t with (nolock)
join [distribution].[dbo].MSsubscriptions as s with (nolock)
t.article_id = s.article_id
and t.publisher_database_id = s.publisher_database_id
, max(hist.[time]) as [time]
[distribution].[dbo].MSdistribution_history hist with (nolock)
, isnull(max(xact_seqno), 0x0) as maxseq
from [distribution].[dbo].MSdistribution_history with (nolock)
group by agent_id
) as h
hist.agent_id = h.agent_id
and h.maxseq = hist.xact_seqno
) as MaxAgentValue
on MaxAgentValue.agent_id = s.agent_id
on [distributionAgent].id = und.agent_id
and und.[time] = [distributionHistory].[time]
join [master].[sys].[servers] as sub with (nolock)
on [distributionAgent].subscriber_id = sub.server_id
outer apply (
select top 1
from [distribution].[dbo].MSrepl_errors with (nolock)
where id = [distributionHistory].error_id
order by time desc
) as [Last Error];
I used to get really nervous about renaming database files, which I think is an appropriate response. Changing the attributes of the database’s physical objects does sound a bit scary on the surface, but once you’ve done it a few times you’ll realize it’s easy to do, and easy to fix if you make a mistake. This simple script template shows the basic steps of the process.
-- USE [master];
--Change logical file names.
ALTER DATABASE [My_Database]
MODIFY FILE(NAME = [old_name_data], NEWNAME = [new_name_data]);
ALTER DATABASE [My_Database]
MODIFY FILE(NAME = [old_name_log], NEWNAME = [new_name_log]);
--Disconnect all existing sessions.
ALTER DATABASE [My_Database] SET SINGLE_-- USER WITH ROLLBACK IMMEDIATE;
--Change database to OFFLINE mode.
ALTER DATABASE [My_Database] SET OFFLINE;
STOP! NOW RENAME THE PHYSICAL FILES ON DISK
--Point databases at new phyisical files.
ALTER DATABASE [My_Database] MODIFY FILE(NAME = 'new_name_data',
FILENAME = 'D:\MSSQL13.MSSQLSERVER\MSSQL\DATA\new_name_data.mdf');
ALTER DATABASE [My_Database] MODIFY FILE(NAME = 'new_name_log',
FILENAME = 'L:\MSSQL13.MSSQLSERVER\MSSQL\DATA\new_name_log.ldf');
--Change database to ONLINE mode.
ALTER DATABASE [My_Database] SET ONLINE;
--Reopen connections to all users
ALTER DATABASE [My_Database] SET MULTI_-- USER;
I came across this website that has an excellent explanation for introduction to machine learning. The visualizations are very nice and easy to understand.