A New Word: Anderance

anderance – n. the awareness that your partner perceives the relationship from a totally different angle than you – spending years looking at a different face across the table, listening for cues in a different voice = an odd reminder that no matter how much you have in common, you’re still in love with different people.

I often think of anderance since I spend a lot of time with my wife, in daily life, traveling, communicating with phones. I sometimes wonder why she sees things in my differently than I do. Maybe she sees more or less, maybe she has a different view of me than I do.

I realize that who I think I am, and who she thinks I am are a bit different. Not a lot, but a bit.

Probably the same for her.

It’s been 30 years, and it’s still amazing. And I still learn things about her, about me, and about us.

From the Dictionary of Obscure Sorrows

Posted in Blog | Tagged , | Comments Off on A New Word: Anderance

Password Guidance

I remember working at a large organization with a team of other IT Operations staffers. We rotated this one job every month amongst a few people, each taking turns, where we’d lose a day to update all the privileged passwords for our servers. This was before Managed Service Accounts and the cloud, when we were required to change these every 30 days and then store the new ones in an encrypted store.

What struck me when I got stuck with this wasn’t the requirement to change every 30 days; that seemed normal. The thing that bothered me was how manual this was. As a former developer, I wrote some scripts to automated this, pre-PowerShell, and make the task easier on my fellow sys admins. I had scripts to generate a password, change it in AD, then print the pwd to be copied into our secure storage (no API there). This ran in a loop so I didn’t lose a whole day to changing password.

These days, we have lots of alternatives to managing passwords, and in fact, much of modern guidance isn’t to require password changes so often. For systems, use an automated process such as an MSA or GMSA. For users, we’ve mostly given up on changes and are trying to get people to use decently long passwords and disparate ones across services.

Modern guidance from Microsoft says to avoid using common passwords (asdfasdf, password1, ec.) and don’t use the same password in multiple places. MFA is also recommended, but the anti-patterns for success are requiring long, complex passwords or frequent changes. Studies show these lead to less security because users do stupid things.

These days, I would guess many of you managing database systems use some sort of integrated security with AD, Entra, OAuth, etc. However, I know there are still places where passwords are in use. Do you require changes often? Do you change any of your passwords regularly?

Security is always hard, and it’s even harder when the recommendations and rules aren’t consistent or even enforced. I don’t know what to do, but I try to use disparate, long passwords and MFA wherever I can. So far that’s worked well.

Steve Jones

Listen to the podcast at Libsyn, Spotify, or iTunes.

Note, podcasts are only available for a limited time online.

Posted in Editorial | Tagged | 3 Comments

Sparse Columns Can Use More Space: #SQLNewBlogger

I saw this as a question submitted at SQL Server Central, and wasn’t sure it was correct, but when I checked, I was surprised. If you choose to designate columns as sparse, but you have a lot of data, you can use more space.

This post looks at how things are stored and the impact if much of your data isn’t null.

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

Setting Up

Let’s create a couple of tables that are the same, but with sparse columns for one of them.

CREATE TABLE [dbo].[NoSparseColumnTest](
     [ID] [int] NOT NULL,
     [CustomerID] [int] NULL,
     [TrackingDate] [datetime] NULL,
     [SomeFlag] [tinyint] NULL,
     [aNumber] [numeric](38, 4) NULL,
  CONSTRAINT [NoSparseColumnsPK] PRIMARY KEY CLUSTERED 
(
     [ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[SparseColumnTest](
     [ID] [int] NOT NULL,
     [CustomerID] [int] NULL,
     [TrackingDate] [datetime] SPARSE  NULL,
     [SomeFlag] [tinyint] SPARSE  NULL,
     [aNumber] [numeric](38, 4) SPARSE  NULL,
  CONSTRAINT [SparseColumnPK] PRIMARY KEY CLUSTERED 
(
     [ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO

Once we have these, I used claude to help me fill this with data. That’s coming in another post, but I uploaded the script here. This is for the SparseTable Test, where I replaced the select on line 59 with NULL values. In the NoSparse table, this selected random data.

If I select data from the tables and count rows, I see 1,000,000 rows in each. However, the Sparse table is all NULL values in these columns.

2025-09_0228

Checking the Sizes

I can use sp_spaceused to check sizes. The results of running this is below, but here is the summary

  • NoSparse Columns – 42MB and 168KB for the index
  • Sparse Columns – 16MB and 72KB for the index

A good set of savings. Here is the raw data:

2025-09_0229

Adding Sparse Data

I’m going to update 10% of the rows to be not null in different columns. Not 10% total, but a random 10% amongst all the columns. Again, Claude gave me a script to do this and I have run it. This is the SparseTest_UpdateData.sql in the zip file above.

After running this, I have 900,000 nulls i the TRackingDate, as well as the other columns. You can see the counts below, and a sample of data.

2025-09_0230

If we re-run the size comparison, it’s changed. Now I have:

  • NoSparse Columns – 42MB and 168KB for the
    index
  • Sparse Columns – 33.7MB and 88KB for the index

Not bad, and still savings.

Let’s re-run the update script and aim not for 10% updates, but 65% updates. This gets me to only 315k NULL values in the tables, or a little over 70% of my sparse columns are full of data. My sizes now are:

  • NoSparse Columns – 42MB and 168KB for the
    index
  • Sparse Columns – 67MB and 192KB for the index

My sparse columns now use more space than my regular columns.

Beware of using the sparse option unless you truly have sparse data. I didn’t test to find out where the tipping point it, but I’d hope it was less than 50% of data being populated.

SQL New Blogger

This is another post in my series that tries to inspire you to blog. It’s a simple post looking at a concept that not a lot of people might get, but which might trigger a question in an interview. That’s why you blog. You can share knowledge, but you build your brand and get interviewers to ask you questions about your blog.

This post took a little longer, about 30 minutes to write, though the AI made it go quicker to actually generate the data for my tables. There were a few errors, which I’ll document, but pasting in the error got the GenAI to fix things.

This post showed me testing something I was wondering about. In a quick set of tests, I learned that I need to be careful if I use a sparse option. You could showcase this and update in 10% increments (or less) and keep testing sizes until you find when there is a tipping point. Bonus if you use a column from an actual table in your system.

https://learn.microsoft.com/en-us/sql/relational-databases/tables/use-sparse-columns?view=sql-server-ver17

Posted in Blog | Tagged , | 3 Comments

T-SQL Tuesday #190–Mastering a New Technical Skill

It’s time for T-SQL Tuesday again and this time Todd Kleinhans has a great invitation that is near and dear to my heart: mastering a new or existing technical skill. That’s been a lot of what I try to inspire people to do at SQL Server Central.

Make a plan and start learning. And respond to Todd’s invitation and write down your plan and share it. Start a blog, use Linked In, whatever. Spread the word on socials as well.

If you want to host, I’m always looking for hosts for T-SQL Tuesday. Ping me on Twitter/X, BlueSky, or LinkedIn.

Mastering a New Tech Skill

Like Todd, I’m interested in AI and I think it will dramatically change the world in the coming future. I also think it’s a bit of a technical skill that is important to learn. I wrote about this a bit in last month’s post.

How do I work with a GenAI model and improve my technical skills? The easy answer is more and more. I’ve been having more conversations with Claude, usually looking for ways to help me solve a problem or write code, and then ask the GenAI to explain things.

However, I wrote awhile ago about an experiment in helping someone else learn something: Can an AI Help Me Find a Job?. For me, I’ve been looking a bit more at DataBricks, as I hear this from clients all the time. I wanted to gain some skill here, so I decided to ask Claude to help me.

2025-09_0225

I got a good outline of things to do across a few months. I then asked for references and got some:

2025-09_0226

The next stage for me is to start embarking on this journey a few nights a week and learn some things that might help me both in my job, and potentially in a future position if I need one.

My Complete Outline from Claude

Here’s the end result, with links.

Databricks Learning Outline with Resources

Phase 1: Foundations (1-2 weeks)

Understanding the Basics

  • What is Databricks and why it’s used
  • Core concepts: clusters, notebooks, workspaces, and Apache Spark
  • Databricks architecture and modern data stack integration

Key Resources:

Phase 2: Getting Started (2-3 weeks)

Hands-on Basics

  • Navigating workspace interface
  • Creating and managing clusters
  • Working with notebooks
  • Basic data import methods

Key Resources:

Phase 3: Data Analysis Fundamentals (3-4 weeks)

Core Analytics Skills

  • Data exploration and cleaning
  • Working with different data formats
  • Basic SQL and PySpark operations

Key Resources:

Phase 4: Intermediate Techniques (4-5 weeks)

Advanced Analytics

  • Complex transformations and ETL
  • Streaming data and machine learning
  • Performance optimization

Key Resources:

Phase 5: Production and Best Practices (2-3 weeks)

Professional Development

  • Job scheduling and workflows
  • Security and monitoring
  • Integration patterns

Key Resources:

Additional Learning Platforms:
Certification Path:
Community and Support:
Getting Started Steps:
  1. Sign up for Databricks Free Edition: Visit the Databricks Free Edition signup page and pick your preferred signup method Databricks Free Edition | Databricks on AWS
  2. Access free training: Free unlimited access to training content on Databricks Academy provides on-demand learning experiences for all skill levels Databricks Launches Free Edition and Announces $100 Million Investment to Develop the Next Generation of Data and AI Talent – Databricks
  3. Join the community: Connect with other learners and experts
  4. Start with sample datasets: Practice with built-in datasets before using your own data

The great news is that all self-paced training across AI, data engineering, and more is now free for learners Databricks Training & Certification Programs | Databricks, making it easier than ever to get started with Databricks!

Posted in Blog | Tagged , , | 1 Comment