Software

Five Eights

2 minute read

With the recent news that Adam Selipsky is leaving AWS, I thought I’d share my funny Adam story.
(Continued...)

Iterating Over Metadata With Snowpark

3 minute read

Last time we saw how to create and use simple Java functions in Snowflake using Snowpark to detect and mask PII. But this gets awkward and tedious if we need to mask many columns. Let’s see how we can use Snowpark to iterate over metadata to make this simple and repeatable
(Continued...)

Basic PII Detection and Masking in Snowflake Using Java

5 minute read

I wanted to share some code that I’ve used previously in demos. The examples here do basic detection and masking of personally-identifying information (PII) in Snowflake using Snowpark and Java’s built-in regular expression support.
(Continued...)

Tableau Prep: The Power of Composability

5 minute read

When we built Tableau Prep, we put a premium on ensuring composability of operations: you can take the operations Prep supports and string them together in any combination you need. There are no restrictions based on where the data came from, or what operations came before.
(Continued...)

Tableau Prep: The Flow

5 minute read

I've been a bit quiet lately, but Tableau Prep out the door and it's time to make a little noise. Clark recently wrote an excellent post on the basic UX architecture of Prep. Here I'd like to cover a key concept underlying Prep that may be a bit foreign to people coming from Tableau: the flow. This isn't the most glamorous part of Prep, but it is one of the most fundamental concepts in the tool, so it seems worth spending some quality time on. Strap on your life jacket and read on for more.
(Continued...)

When Live Beats an Extract

7 minute read

When using Tableau, taking an extract is always better than using a live query, right? Well, no. Of course. Obviously, when your data are changing and you want to get all of the latest updates in your viz, you'll want to use a live query. But if that's not the case, then an extract is clearly better, especially with Hyper in 10.5, right? Well, no! Shoot! This is complicated? When will live beat an extract? Let's take a look at a few cases.
(Continued...)

The Query Behind the Viz

7 minute read

Several posts here have explored the queries Tableau generates as it builds your viz, including last week's write-up on custom SQL. This is a trend that will continue: it's much easier to understand a machine when you can see its inner workings. But how do I get at those queries? I was talking with Yvan Fornes, and he suggested that I write about how I do it. Challenge accepted! Except I may have gone overboard: in this post I'll explore three ways to find the queries underlying your viz.
(Continued...)

Custom SQL in Tableau: Subqueries and SQL Injection

5 minute read

I recently answered a question on the Tableau Community forums that arose from confusion over why some (perfectly correct) SQL wasn't working as custom SQL in Tableau. The poster wanted a list of Tableau's supported syntax. But as it turns out, that's the wrong question: Tableau doesn't have a list of all the custom SQL syntax it supports because it really is just passing along the SQL code as you've typed it. So why would a perfectly reasonable custom query fail? And what's the link to SQL injection? Read on!
(Continued...)

Row-Level Security: A Cautionary Tale

7 minute read

Row-level security is a common requirement for people trying to control access to data. Some systems provide this natively, but when it's not provided, people often roll their own using the tools they have—with mixed results In this post we'll explore a common way to implement row-level security on top of a relational database and see why it may not be as secure as it looks.
(Continued...)

Tableau Data Sources: Live vs Extract

8 minute read

Continuing last-week's trend, we'll again take a look at an aspect of Tableau that people often find confusing: the difference between live and extracted data sources. And again, we're going to take a bit of a database perspective to clarify the situation.
(Continued...)

Dimensions and Measures: A SQL Perspecitive

5 minute read

I thought I'd kick this off gently. I remember going through Boot Camp after joining Tableau and learning about dimensions and measures. And I remember finding the descriptions rather confusing.
(Continued...)

Back to Top ↑

Tableau

Five Eights

2 minute read

With the recent news that Adam Selipsky is leaving AWS, I thought I’d share my funny Adam story.
(Continued...)

When Live Beats an Extract

7 minute read

When using Tableau, taking an extract is always better than using a live query, right? Well, no. Of course. Obviously, when your data are changing and you want to get all of the latest updates in your viz, you'll want to use a live query. But if that's not the case, then an extract is clearly better, especially with Hyper in 10.5, right? Well, no! Shoot! This is complicated? When will live beat an extract? Let's take a look at a few cases.
(Continued...)

A Visual Guide to Telescope Eyepieces

2 minute read

I needed some help when choosing telescope eyepieces, and was thrilled to come upon a very thorough list over at Cloudy Nights. But a spreadsheet is one thing—a viz is better.
(Continued...)

The Query Behind the Viz

7 minute read

Several posts here have explored the queries Tableau generates as it builds your viz, including last week's write-up on custom SQL. This is a trend that will continue: it's much easier to understand a machine when you can see its inner workings. But how do I get at those queries? I was talking with Yvan Fornes, and he suggested that I write about how I do it. Challenge accepted! Except I may have gone overboard: in this post I'll explore three ways to find the queries underlying your viz.
(Continued...)

Custom SQL in Tableau: Subqueries and SQL Injection

5 minute read

I recently answered a question on the Tableau Community forums that arose from confusion over why some (perfectly correct) SQL wasn't working as custom SQL in Tableau. The poster wanted a list of Tableau's supported syntax. But as it turns out, that's the wrong question: Tableau doesn't have a list of all the custom SQL syntax it supports because it really is just passing along the SQL code as you've typed it. So why would a perfectly reasonable custom query fail? And what's the link to SQL injection? Read on!
(Continued...)

Tableau Data Sources: Live vs Extract

8 minute read

Continuing last-week's trend, we'll again take a look at an aspect of Tableau that people often find confusing: the difference between live and extracted data sources. And again, we're going to take a bit of a database perspective to clarify the situation.
(Continued...)

Dimensions and Measures: A SQL Perspecitive

5 minute read

I thought I'd kick this off gently. I remember going through Boot Camp after joining Tableau and learning about dimensions and measures. And I remember finding the descriptions rather confusing.
(Continued...)

Back to Top ↑

Databases

When Live Beats an Extract

7 minute read

When using Tableau, taking an extract is always better than using a live query, right? Well, no. Of course. Obviously, when your data are changing and you want to get all of the latest updates in your viz, you'll want to use a live query. But if that's not the case, then an extract is clearly better, especially with Hyper in 10.5, right? Well, no! Shoot! This is complicated? When will live beat an extract? Let's take a look at a few cases.
(Continued...)

The Query Behind the Viz

7 minute read

Several posts here have explored the queries Tableau generates as it builds your viz, including last week's write-up on custom SQL. This is a trend that will continue: it's much easier to understand a machine when you can see its inner workings. But how do I get at those queries? I was talking with Yvan Fornes, and he suggested that I write about how I do it. Challenge accepted! Except I may have gone overboard: in this post I'll explore three ways to find the queries underlying your viz.
(Continued...)

Custom SQL in Tableau: Subqueries and SQL Injection

5 minute read

I recently answered a question on the Tableau Community forums that arose from confusion over why some (perfectly correct) SQL wasn't working as custom SQL in Tableau. The poster wanted a list of Tableau's supported syntax. But as it turns out, that's the wrong question: Tableau doesn't have a list of all the custom SQL syntax it supports because it really is just passing along the SQL code as you've typed it. So why would a perfectly reasonable custom query fail? And what's the link to SQL injection? Read on!
(Continued...)

Row-Level Security: A Cautionary Tale

7 minute read

Row-level security is a common requirement for people trying to control access to data. Some systems provide this natively, but when it's not provided, people often roll their own using the tools they have—with mixed results In this post we'll explore a common way to implement row-level security on top of a relational database and see why it may not be as secure as it looks.
(Continued...)

Tableau Data Sources: Live vs Extract

8 minute read

Continuing last-week's trend, we'll again take a look at an aspect of Tableau that people often find confusing: the difference between live and extracted data sources. And again, we're going to take a bit of a database perspective to clarify the situation.
(Continued...)

Dimensions and Measures: A SQL Perspecitive

5 minute read

I thought I'd kick this off gently. I remember going through Boot Camp after joining Tableau and learning about dimensions and measures. And I remember finding the descriptions rather confusing.
(Continued...)

Back to Top ↑

SQL

When Live Beats an Extract

7 minute read

When using Tableau, taking an extract is always better than using a live query, right? Well, no. Of course. Obviously, when your data are changing and you want to get all of the latest updates in your viz, you'll want to use a live query. But if that's not the case, then an extract is clearly better, especially with Hyper in 10.5, right? Well, no! Shoot! This is complicated? When will live beat an extract? Let's take a look at a few cases.
(Continued...)

The Query Behind the Viz

7 minute read

Several posts here have explored the queries Tableau generates as it builds your viz, including last week's write-up on custom SQL. This is a trend that will continue: it's much easier to understand a machine when you can see its inner workings. But how do I get at those queries? I was talking with Yvan Fornes, and he suggested that I write about how I do it. Challenge accepted! Except I may have gone overboard: in this post I'll explore three ways to find the queries underlying your viz.
(Continued...)

Custom SQL in Tableau: Subqueries and SQL Injection

5 minute read

I recently answered a question on the Tableau Community forums that arose from confusion over why some (perfectly correct) SQL wasn't working as custom SQL in Tableau. The poster wanted a list of Tableau's supported syntax. But as it turns out, that's the wrong question: Tableau doesn't have a list of all the custom SQL syntax it supports because it really is just passing along the SQL code as you've typed it. So why would a perfectly reasonable custom query fail? And what's the link to SQL injection? Read on!
(Continued...)

Row-Level Security: A Cautionary Tale

7 minute read

Row-level security is a common requirement for people trying to control access to data. Some systems provide this natively, but when it's not provided, people often roll their own using the tools they have—with mixed results In this post we'll explore a common way to implement row-level security on top of a relational database and see why it may not be as secure as it looks.
(Continued...)

Tableau Data Sources: Live vs Extract

8 minute read

Continuing last-week's trend, we'll again take a look at an aspect of Tableau that people often find confusing: the difference between live and extracted data sources. And again, we're going to take a bit of a database perspective to clarify the situation.
(Continued...)

Dimensions and Measures: A SQL Perspecitive

5 minute read

I thought I'd kick this off gently. I remember going through Boot Camp after joining Tableau and learning about dimensions and measures. And I remember finding the descriptions rather confusing.
(Continued...)

Back to Top ↑

Meta

Au Revoir, Snowflake!

2 minute read

Just reading this blog, you might guess that all I do is leave jobs. First leaving Tableau, and now, four years later, departing Snowflake. Here are some thoughts on the future.
(Continued...)

Hello World!

less than 1 minute read

It's really: "Hello again!"
(Continued...)

Back to Top ↑

Snowflake

Au Revoir, Snowflake!

2 minute read

Just reading this blog, you might guess that all I do is leave jobs. First leaving Tableau, and now, four years later, departing Snowflake. Here are some thoughts on the future.
(Continued...)

Iterating Over Metadata With Snowpark

3 minute read

Last time we saw how to create and use simple Java functions in Snowflake using Snowpark to detect and mask PII. But this gets awkward and tedious if we need to mask many columns. Let’s see how we can use Snowpark to iterate over metadata to make this simple and repeatable
(Continued...)

Basic PII Detection and Masking in Snowflake Using Java

5 minute read

I wanted to share some code that I’ve used previously in demos. The examples here do basic detection and masking of personally-identifying information (PII) in Snowflake using Snowpark and Java’s built-in regular expression support.
(Continued...)

Back to Top ↑

Snowpark

Au Revoir, Snowflake!

2 minute read

Just reading this blog, you might guess that all I do is leave jobs. First leaving Tableau, and now, four years later, departing Snowflake. Here are some thoughts on the future.
(Continued...)

Iterating Over Metadata With Snowpark

3 minute read

Last time we saw how to create and use simple Java functions in Snowflake using Snowpark to detect and mask PII. But this gets awkward and tedious if we need to mask many columns. Let’s see how we can use Snowpark to iterate over metadata to make this simple and repeatable
(Continued...)

Basic PII Detection and Masking in Snowflake Using Java

5 minute read

I wanted to share some code that I’ve used previously in demos. The examples here do basic detection and masking of personally-identifying information (PII) in Snowflake using Snowpark and Java’s built-in regular expression support.
(Continued...)

Back to Top ↑

Math

Two Unequal Products

5 minute read

Here’s a reasonably elegant solution to a fun problem I stole from Timothy Gowers: prove that for every positive integer n, there do not exist positive integers a, b, c, d with ad=bc and n^2 < a < b < c < d < (n+1)^2.
(Continued...)

The Fourier Series via Linear Algebra

7 minute read

I didn't post last week because I was on vacation. But on vacation I decided to write about something a little out of my comfort zone: Fourier series. (Yeah. Try being my wife.) Fourier series (and the related Fourier transform) made some sense to me for, but I never really learned how to derive them so they always seemed a bit magical. As I was going through Arthur Mattuck's excellent differential equations course at MIT's Open Courseware, the Fourier series clicked for me, so I thought I'd distill this out.
(Continued...)

Back to Top ↑

Tableau Prep

Tableau Prep: The Power of Composability

5 minute read

When we built Tableau Prep, we put a premium on ensuring composability of operations: you can take the operations Prep supports and string them together in any combination you need. There are no restrictions based on where the data came from, or what operations came before.
(Continued...)

Tableau Prep: The Flow

5 minute read

I've been a bit quiet lately, but Tableau Prep out the door and it's time to make a little noise. Clark recently wrote an excellent post on the basic UX architecture of Prep. Here I'd like to cover a key concept underlying Prep that may be a bit foreign to people coming from Tableau: the flow. This isn't the most glamorous part of Prep, but it is one of the most fundamental concepts in the tool, so it seems worth spending some quality time on. Strap on your life jacket and read on for more.
(Continued...)

Back to Top ↑

Music

A Dozen Notes, Give or Take

7 minute read

Western classical music typically uses twelve distinct notes. It always bugged me: why twelve?
(Continued...)

Back to Top ↑

Security

Row-Level Security: A Cautionary Tale

7 minute read

Row-level security is a common requirement for people trying to control access to data. Some systems provide this natively, but when it's not provided, people often roll their own using the tools they have—with mixed results In this post we'll explore a common way to implement row-level security on top of a relational database and see why it may not be as secure as it looks.
(Continued...)

Back to Top ↑

Linear Algebra

The Fourier Series via Linear Algebra

7 minute read

I didn't post last week because I was on vacation. But on vacation I decided to write about something a little out of my comfort zone: Fourier series. (Yeah. Try being my wife.) Fourier series (and the related Fourier transform) made some sense to me for, but I never really learned how to derive them so they always seemed a bit magical. As I was going through Arthur Mattuck's excellent differential equations course at MIT's Open Courseware, the Fourier series clicked for me, so I thought I'd distill this out.
(Continued...)

Back to Top ↑

Astronomy

A Visual Guide to Telescope Eyepieces

2 minute read

I needed some help when choosing telescope eyepieces, and was thrilled to come upon a very thorough list over at Cloudy Nights. But a spreadsheet is one thing—a viz is better.
(Continued...)

Back to Top ↑

Java

Basic PII Detection and Masking in Snowflake Using Java

5 minute read

I wanted to share some code that I’ve used previously in demos. The examples here do basic detection and masking of personally-identifying information (PII) in Snowflake using Snowpark and Java’s built-in regular expression support.
(Continued...)

Back to Top ↑

UDF

Basic PII Detection and Masking in Snowflake Using Java

5 minute read

I wanted to share some code that I’ve used previously in demos. The examples here do basic detection and masking of personally-identifying information (PII) in Snowflake using Snowpark and Java’s built-in regular expression support.
(Continued...)

Back to Top ↑

Scala

Iterating Over Metadata With Snowpark

3 minute read

Last time we saw how to create and use simple Java functions in Snowflake using Snowpark to detect and mask PII. But this gets awkward and tedious if we need to mask many columns. Let’s see how we can use Snowpark to iterate over metadata to make this simple and repeatable
(Continued...)

Back to Top ↑

Fun

Five Eights

2 minute read

With the recent news that Adam Selipsky is leaving AWS, I thought I’d share my funny Adam story.
(Continued...)

Back to Top ↑