Author: way0utwest

  • The MVP Award Looks Backward

    I was awarded the Microsoft Data Platform MVP designation in July 2018. I’ve been honored to receive this designation since 2008, though the award doesn’t drive my work. I started writing articles to help others get better with their work, just as I got help from others before me. That was the goal of SQLServerCentral, and I’m proud whenever I hear that I’ve been able to help someone solve a problem, learn a new skill, or improve their career in some way.

    Microsoft has an MVP site, and they describe the people they recognize in this way: “Microsoft Most Valuable Professionals, or MVPs, are technology experts who passionately share their knowledge with the community.” The award is for those that make efforts to help others “ranging from speaking engagements, to social media posts, to writing books, to helping others in online communities …” In other words, for those that help others, Microsoft chooses to designate some of them as MVPs for their efforts.

    Their past efforts.

    That’s the key. If you are awarded the MVP designation, then you’ve spent quite a bit of time during the previous year helping others and sharing knowledge. You could stop all your writing, speaking, etc., and you’d still be an MVP for the next year. You might not be renewed after that, but you could use the logo, attend the MVP Summit, and more during this year.

    There are budget constraints to the MVP program, just like other corporate initiatives. As a result, not every speaker, blogger, open source MS stack developer, etc. gets awarded. People get nominated, or if they’re already MVPs, they’re automatically considered for the next award period. This leads to an evaluation process where every nominee for some period is ranked in some order. I have no idea what method is used, but it’s a combination of speaking, blogging, organizing events, writing free/open source software, and likely more. There is a budget that says only xx people will be awarded, and the top xx people get picked. I really have no idea how this works, but since I’ve been a recipient of the award, this is what I’ve observed.

    Most people appreciate the award and continue to contribute to the community. Some really want to earn the award and make special efforts to ensure they make plenty of contributions. If you want to get recognized, it takes a lot of work. This is a competitive environment, with many people regularly making contributions to the community. You have to make enough to rank above the cutoff, regardless of accomplishments in prior years.

    I’m always appreciative of the award, but as I mentioned, it doesn’t drive me. I have a set of things that I do for work, and a set that I volunteer for as a part of the community. If that earns me a high enough ranking, that’s great. If it doesn’t, I’m fine with that. Ultimately my goal is to help others, and I’ll continue to do that, regardless of recognition.

    Steve Jones

    The Voice of the DBA Podcast

    Listen to the MP3 Audio ( 4.1MB) podcast or subscribe to the feed at iTunes and Libsyn.

  • Back to #SQLSat Louisville

    Next week is SQL Saturday #729 – Lousiville and I’m making the trip. This will be my third or fourth trip there, and I’m looking forward to the trip. It’s a nice town, I can visit some family, and lots of #sqlfamily friends will be there.

    This is the 10th event, which is very exciting. Lots of props to John Morehouse, Chris Yates, Mala Mahadevan, and everyone setting the event up. Amazing to see another city get to their tenth event.

    The schedule is up, and there are some great sessions. I’m doing my encryption and security session, but I wonder if I’ll have many people coming. I’m up against Randy Knight’s deadlock session, William Wolf’s T-SQL session and a Linux talk from Dave Walden plus others.

    In fact, lots of tough choices. Each time slot has at least 2 or 3 sessions I’d like to see, and I’ve got tough choices to make.

    If you’re in the area, this is a fun event and the chance to learn some new things about SQL Server. Register today and come spend the day talking about the data platform.

  • AI Regulators

    With the GDPR now being enforced in the European Union, there are plenty of companies that are getting concerned about the potential fines from regulatory authorities if they aren’t complying with the law, or at least, making an attempt. There certainly is leeway for regulators to adjust fines or give warnings if a company is making efforts to comply. This has likely contributed to the work inside many organizations to move towards compliance.

    There are likely some companies that might not worry, since there are relatively few regulatory employees and many companies. There are lots of complaints coming in, which could easily overwhelms the relatively small staff in each EU country. Complaints might not be investigated in a timely manner or even lost because of the workload. The problem will likely get worse as more consumers complain about data processing practices. I don’t expect regulatory authority staffing to increase, so I’m sure only the most aggregious or complained about companies will get caught.

    There is one way to help amplify the capabilities of the relatively small staffs reviewing complaints. There are researchers in the EU Institute in Florence that are are working with consumer organizations to create AI programs that can help by performing some of the work. The initial thrust is to evaluate privacy policies of companies. If there are issues, the software doesn’t assess a fine, but it does alert a human to perform additional checks.

    In one sense, this is exactly what computers can do well. They amplify the capabilities of humans by doing a piece of the work. We can build systems, whether traditional programmed ones or AI based applications, that handle a piece of the work that requires lots of human labor. Once initial evaluations are made, a human can review the work and make more refined judgments.

    The danger, to me, is that humans will be lazy. They’ll start to trust the AI systems as authorities and use less of their own judgment, mostly because it’s just easier. I could see these systems evolve over time to actually train humans involuntarily. New employees would initially trust the AI results, learning from the AI rather than teaching it and constantly evaluating its effectiveness.

    I think AI can really help improve the way that we accomplish work in many ways, but it should be regularly audited and approached with some skepticism. There certainly needs to be some sort of supervisory group overseeing the program that isn’t involved in the outcome. We should be sure that the goals and results from any AI system continue to be focused on what we want to achieve, and that we transparently define those goals for anyone impacted. Otherwise we might end up having AIs evolve in ways that are counter to the original purpose.

    Steve Jones

    The Voice of the DBA Podcast

    Listen to the MP3 Audio ( 3.5MB) podcast or subscribe to the feed at iTunes and Libsyn.

  • Finding Inconsistent Key Values–#SQLNewBlogger

    Another post for me that is simple and hopefully serves as an example for people trying to get blogging as #SQLNewBloggers.

    I was reading Iris Classon’s blog recently and ran across a post on her day at work. I think it’s a fantastic post that does help younger people understand what a job is like. I’m looking forward to seeing more.

    One quick thing struck me in the post, which was that she has clients that are missing key value settings in a table. I’ve dealt with this, and want to write more, but a quick post on just finding out that there are missing settings.

    Finding the Data Inconsistencies

    Each client should have a set of key value pairs in a settings table. However, because of application problems, not every client does. In the sample data (below), there are 8 clients, each of which should have 5 values in the GlobalSettings table. However, there are only 20 rows in this table when there should be 40.

    This is the type of issue I’ve had occur in an application, especially one that evolves over time. We add a key-value item to the application, which new clients get, but older ones are never populated. This is the same type of issue I saw in a post by Iris Classon.

    How can I find the items that don’t match? One simple way is to count the values, but include a HAVING clause to limit the results. If I want to see who has all the values, I can do this:

    SELECT gs.ClientID, COUNT(*)
    FROM dbo.GlobalSetting AS gs
    GROUP BY gs.ClientID
      HAVING COUNT(*) = 5

    In my sample data, this returns one row, for Client 1. If I change the HAVING clause to < 5, I get the other seven rows.

    2018-06-29 14_46_00-SQLQuery1.sql - (local)_SQL2016.sandbox (vstsbuild (56))_ - Microsoft SQL Server

    There are other considerations here, and this isn’t the best way that you might ensure you have the values. I might have a table, or a derived table that ensures I’m checking the right 5 values.

    I’ve written more about this in an article at SQLServerCentral.

    The Setup

    I built a couple quick tables and added data with this script. Note that there are 8 clients, and that each has a series of settings in a table. There are 5 possible settings (Position, Height, Weight, Number, College)

    CREATE TABLE Client
    (ClientKey INT IDENTITY (1,1) NOT NULL CONSTRAINT ClientPK PRIMARY KEY 
    , ClientName VARCHAR(200)
    , ClientStatus TINYINT)
    go
    CREATE TABLE GlobalSetting
    ( GlobalSettingKey INT IDENTITY (1,1) NOT NULL CONSTRAINT GlobalSettingPK PRIMARY KEY 
    , ClientID INT NOT NULL CONSTRAINT GlobalSettingFK_Client_ClientID FOREIGN KEY REFERENCES Client
    , GlobalSettingName VARCHAR(100)
    , GlobalSettingValue VARCHAR(500)
    )
    GO
    INSERT client VALUES ('Shaquil', 1), ('Von', 1), ('Bradley', 1), ('Shane', 2), ('Todd', 2), ('Jerrol', 3), ('Jeff', 3), ('Josey', 3)
    
     Position, College, Height, weight, number
    INSERT dbo.GlobalSetting
    (
        ClientID ,
        GlobalSettingName ,
        GlobalSettingValue
    )
    VALUES
      (1, 'Position', 'OLB')
    , (1, 'Weight', '250'),
    (1, 'College', 'CSU') , (1, 'Height', '74') , (1, 'Number', '48') , (2, 'Weight', '250') , (2, 'Number', '58') , (2, 'College', 'Texas A&M') , (3, 'Height', '76') , (3, 'Weight', '269') , (4, 'Position', 'OLB') , (4, 'College', 'Missouri') , (4, 'Height', '75') , (5, 'Weight', '230') , (5, 'Number', '51') , (5, 'College', 'Sacramento St') , (6, 'Weight', '235') , (6, 'Position', 'LB') , (7, 'Weight', '249') , (8, 'Number', '47')

    SQLNewBlogger

    This only took about 10 minutes to write, though I had to build the tables and data. Of these, the data took the longest, because I had to look up the values Winking smile.

    This is a basic example of checking data in a business situation. I might write about this in my job, perhaps showing a daily integrity check or a custom metric that I use to ensure the system is working. You can do the same thing and ensure that your data is correct.